[INFO] fetching crate legion-server 0.1.0...
[INFO] testing legion-server-0.1.0 against beta-2025-09-21 for beta-1.91-2
[INFO] extracting crate legion-server 0.1.0 into /workspace/builds/worker-5-tc2/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-5-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate legion-server 0.1.0 on toolchain beta-2025-09-21
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2025-09-21" "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" "+beta-2025-09-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2025-09-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] b8362cf841af795efaec1be3d217d5f87601d2597f49f0b99893ed700ba8b461
[INFO] running `Command { std: "docker" "start" "-a" "b8362cf841af795efaec1be3d217d5f87601d2597f49f0b99893ed700ba8b461", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b8362cf841af795efaec1be3d217d5f87601d2597f49f0b99893ed700ba8b461", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b8362cf841af795efaec1be3d217d5f87601d2597f49f0b99893ed700ba8b461", kill_on_drop: false }`
[INFO] [stdout] b8362cf841af795efaec1be3d217d5f87601d2597f49f0b99893ed700ba8b461
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+beta-2025-09-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] dfab56ae6b0f8aa16424c5a3bd1a4d3cc400ece7640beee40010381734c0e7bb
[INFO] running `Command { std: "docker" "start" "-a" "dfab56ae6b0f8aa16424c5a3bd1a4d3cc400ece7640beee40010381734c0e7bb", kill_on_drop: false }`
[INFO] [stderr]    Compiling cfg-if v1.0.1
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]    Compiling memchr v2.7.5
[INFO] [stderr]    Compiling syn v2.0.104
[INFO] [stderr]    Compiling jobserver v0.1.33
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling socket2 v0.6.0
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling mio v1.0.4
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling cc v1.2.31
[INFO] [stderr]    Compiling slab v0.4.10
[INFO] [stderr]    Compiling crypto-common v0.1.6
[INFO] [stderr]    Compiling hashbrown v0.15.4
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling serde_json v1.0.142
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]    Compiling iana-time-zone v0.1.63
[INFO] [stderr]    Compiling form_urlencoded v1.2.1
[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 rustls-pki-types v1.12.0
[INFO] [stderr]    Compiling indexmap v2.10.0
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling cmake v0.1.54
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling aws-lc-rs v1.13.3
[INFO] [stderr]    Compiling crc-catalog v2.4.0
[INFO] [stderr]    Compiling crc v3.3.0
[INFO] [stderr]    Compiling hashlink v0.10.0
[INFO] [stderr]    Compiling signal-hook-registry v1.4.5
[INFO] [stderr]    Compiling crunchy v0.2.4
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling rustls v0.23.31
[INFO] [stderr]    Compiling bytes v1.10.1
[INFO] [stderr]    Compiling tinyvec v1.9.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling aws-lc-sys v0.30.0
[INFO] [stderr]    Compiling concurrent-queue v2.5.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling tokio v1.47.1
[INFO] [stderr]    Compiling webpki-roots v1.0.2
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling atoi v2.0.0
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling spin v0.9.8
[INFO] [stderr]    Compiling tracing-core v0.1.34
[INFO] [stderr]    Compiling unicode-normalization v0.1.24
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling tiny-keccak v2.0.2
[INFO] [stderr]    Compiling event-listener v5.4.0
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling chrono v0.4.41
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling unicode-properties v0.1.3
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]    Compiling uuid v1.17.0
[INFO] [stderr]    Compiling stringprep v0.1.5
[INFO] [stderr]    Compiling const-random-macro v0.1.16
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling tokio-stream v0.1.17
[INFO] [stderr]    Compiling home v0.5.11
[INFO] [stderr]    Compiling dotenvy v0.15.7
[INFO] [stderr]    Compiling rustls-webpki v0.103.4
[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 zerofrom v0.1.6
[INFO] [stderr]    Compiling tracing-attributes v0.1.30
[INFO] [stderr]    Compiling yoke v0.8.0
[INFO] [stderr]    Compiling zerotrie v0.2.2
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling zerovec v0.11.2
[INFO] [stderr]    Compiling thiserror v2.0.12
[INFO] [stderr]    Compiling pest v2.8.1
[INFO] [stderr]    Compiling tracing v0.1.41
[INFO] [stderr]    Compiling whoami v1.6.0
[INFO] [stderr]    Compiling tinystr v0.8.1
[INFO] [stderr]    Compiling icu_locale_core v2.0.0
[INFO] [stderr]    Compiling potential_utf v0.1.2
[INFO] [stderr]    Compiling icu_collections v2.0.0
[INFO] [stderr]    Compiling pest_meta v2.8.1
[INFO] [stderr]    Compiling icu_provider v2.0.0
[INFO] [stderr]    Compiling icu_properties v2.0.1
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]    Compiling hkdf v0.12.4
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling const-random v0.1.18
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling flume v0.11.1
[INFO] [stderr]    Compiling md-5 v0.10.6
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling inout v0.1.4
[INFO] [stderr]    Compiling bitflags v2.9.1
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling dlv-list v0.5.2
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]    Compiling icu_normalizer v2.0.0
[INFO] [stderr]    Compiling parking_lot v0.12.4
[INFO] [stderr]    Compiling either v1.15.0
[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 url v2.5.4
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling sqlx-core v0.8.6
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling pest_generator v2.8.1
[INFO] [stderr]    Compiling blake3 v1.8.2
[INFO] [stderr]    Compiling rand_core v0.9.3
[INFO] [stderr]    Compiling universal-hash v0.5.1
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling signature v2.2.0
[INFO] [stderr]    Compiling opaque-debug v0.3.1
[INFO] [stderr]    Compiling winnow v0.7.12
[INFO] [stderr]    Compiling portable-atomic v1.11.1
[INFO] [stderr]    Compiling poly1305 v0.8.0
[INFO] [stderr]    Compiling ed25519 v2.2.3
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling pest_derive v2.8.1
[INFO] [stderr]    Compiling raw-cpuid v11.5.0
[INFO] [stderr]    Compiling chacha20 v0.9.1
[INFO] [stderr]    Compiling ordered-multimap v0.7.3
[INFO] [stderr]    Compiling async-trait v0.1.88
[INFO] [stderr]    Compiling hashlink v0.8.4
[INFO] [stderr]    Compiling sqlx-postgres v0.8.6
[INFO] [stderr]    Compiling sqlx-sqlite v0.8.6
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling aead v0.5.2
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling base64ct v1.8.0
[INFO] [stderr]    Compiling rustls v0.22.4
[INFO] [stderr]    Compiling convert_case v0.6.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling password-hash v0.5.0
[INFO] [stderr]    Compiling yaml-rust2 v0.8.1
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling ron v0.8.1
[INFO] [stderr]    Compiling chacha20poly1305 v0.10.1
[INFO] [stderr]    Compiling quanta v0.12.6
[INFO] [stderr]    Compiling sqlx-macros-core v0.8.6
[INFO] [stderr]    Compiling rust-ini v0.20.0
[INFO] [stderr]    Compiling json5 v0.4.1
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling ed25519-dalek v2.2.0
[INFO] [stderr]    Compiling x25519-dalek v2.0.1
[INFO] [stderr]    Compiling dashmap v6.1.0
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling rustls-webpki v0.102.8
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]    Compiling pbkdf2 v0.12.2
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling blake2 v0.10.6
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling spinning_top v0.3.0
[INFO] [stderr]    Compiling nonzero_ext v0.3.0
[INFO] [stderr]    Compiling web-time v1.1.0
[INFO] [stderr]    Compiling no-std-compat v0.4.1
[INFO] [stderr]    Compiling governor v0.8.1
[INFO] [stderr]    Compiling argon2 v0.5.3
[INFO] [stderr]    Compiling config v0.14.1
[INFO] [stderr]    Compiling tracing-subscriber v0.3.19
[INFO] [stderr]    Compiling legion-protocol v0.1.0
[INFO] [stderr]    Compiling phalanx-crypto v0.1.0
[INFO] [stderr]    Compiling pin-project v1.1.10
[INFO] [stderr]    Compiling tokio-util v0.7.15
[INFO] [stderr]    Compiling sqlx-macros v0.8.6
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling rustls-pemfile v2.2.0
[INFO] [stderr]    Compiling num_cpus v1.17.0
[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<u8>) -> 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<u8>) -> 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<ActivityEntry>,
[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<Message>,
[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<ChannelMessage>,
[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<ServerMessage>,
[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<RwLock<ServerState>>) -> 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<String>) -> 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<Self, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub async fn connect_sqlite(url: &str) -> Result<Self, DatabaseError> {
[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<User, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub async fn get_user_by_nickname(&self, nickname: &str) -> Result<Option<User>, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub async fn get_user_by_id(&self, id: &str) -> Result<Option<User>, 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<User, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub async fn create_channel(&self, channel: &Channel) -> Result<Channel, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub async fn get_channel(&self, name: &str) -> Result<Option<Channel>, 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<Vec<Channel>, 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<Vec<ChannelMember>, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub async fn get_user_channels(&self, user_id: &str) -> Result<Vec<String>, 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<Vec<BanEntry>, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result<bool, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub async fn get_server_config(&self) -> Result<ServerConfig, DatabaseError> {
[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<String>) -> 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<User, DatabaseError> {
[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<Option<User>, 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<Channel, DatabaseError> {
[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<Option<Channel>, 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<Vec<Channel>, 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<Vec<ChannelMember>, 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<Vec<String>, 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<Vec<BanEntry>, 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<bool, DatabaseError> {
[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<ServerConfig, DatabaseError> {
[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<HistorySelector>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 75 |         end: Option<HistorySelector>,
[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<RwLock<Identity>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 64 |     /// Active Legion channels
[INFO] [stdout] 65 |     channels: Arc<DashMap<String, AsyncPhalanxGroup>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 66 |     /// Client sessions with Legion capabilities
[INFO] [stdout] 67 |     sessions: Arc<DashMap<String, session::LegionSession>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 68 |     /// Key manager for rotation and storage
[INFO] [stdout] 69 |     key_manager: Arc<keys::KeyManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 70 |     /// Member manager for authentication and authorization
[INFO] [stdout] 71 |     member_manager: Arc<members::MemberManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 72 |     /// Federation manager for cross-server communication
[INFO] [stdout] 73 |     federation_manager: Arc<federation::FederationManager>,
[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<Capability>) -> 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<phalanx_crypto::group::GroupStats> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub async fn list_channels(&self) -> Vec<String> {
[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<ChannelType> {
[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<Vec<u8>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec<u8>) -> LegionResult<Strin...
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub async fn handle_key_rotation(&self, channel_name: String, admin_id: String) -> LegionResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult<ChannelInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub async fn list_user_channels(&self, user_id: &str) -> LegionResult<Vec<ChannelSummary>> {
[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<HashMap<String, ChannelKeys>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 25 |     /// Key rotation policies
[INFO] [stdout] 26 |     rotation_policies: RwLock<HashMap<String, RotationPolicy>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     /// Key derivation context
[INFO] [stdout] 28 |     kdf_context: Vec<u8>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 29 |     /// Backup storage handler
[INFO] [stdout] 30 |     backup_handler: Option<Box<dyn BackupHandler>>,
[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<KeyRotationInfo>,
[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<Option<KeyRotationInfo>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     async fn list_backups(&self, channel: &str) -> LegionResult<Vec<u64>>;
[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<dyn BackupHandler>) {
[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<Option<KeyRotationInfo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult<Option<KeyRotationInfo>> {
[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<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub async fn channel_stats(&self, channel: &str) -> LegionResult<ChannelKeyStats> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     pub async fn list_channels(&self) -> Vec<String> {
[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<HashMap<String, ChannelMembership>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     /// Global member registry
[INFO] [stdout] 24 |     member_registry: RwLock<HashMap<String, MemberInfo>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     /// Permission policies
[INFO] [stdout] 26 |     permission_policies: RwLock<HashMap<String, PermissionPolicy>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     /// Invitation system
[INFO] [stdout] 28 |     invitations: RwLock<HashMap<String, Vec<Invitation>>>,
[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<String, ChannelMember>,
[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<String>,
[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<String>,
[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<String, String>,
[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<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 441 |     pub async fn is_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub async fn is_channel_admin(&self, channel_name: &str, member_id: &str) -> LegionResult<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 465 |     pub async fn has_permission(&self, channel_name: &str, member_id: &str, permission: Permission) -> LegionResult<bool> {
[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<ChannelStats> {
[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<Vec<String>> {
[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<Identity>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 23 |     /// Legion Protocol session state
[INFO] [stdout] 24 |     legion_session: RwLock<IronSession>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     /// Client capabilities
[INFO] [stdout] 26 |     capabilities: HashSet<Capability>,
[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<SystemTime>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 31 |     /// Channels this client is in
[INFO] [stdout] 32 |     joined_channels: RwLock<HashSet<String>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 33 |     /// Whether Legion Protocol is fully negotiated
[INFO] [stdout] 34 |     legion_active: RwLock<bool>,
[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<Capability>) -> LegionResult<Self> {
[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<Identity> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub async fn public_key(&self) -> LegionResult<PublicKey> {
[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<String> {
[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<Capability> {
[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<phalanx_crypto::protocol::HandshakeMessage> {
[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<HashMap<String, FederatedServer>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     /// Bridge configurations
[INFO] [stdout] 18 |     bridge_configs: RwLock<HashMap<String, BridgeConfig>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     /// Federation policies
[INFO] [stdout] 20 |     policies: RwLock<FederationPolicy>,
[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<String>,
[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<FederatedServerInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub async fn list_federated_servers(&self) -> Vec<FederatedServerInfo> {
[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<u8>) -> LegionResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec<u8>) -> 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<Self> {
[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<ExtendedChannelInfo> {
[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<MemberRole> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 949 |     async fn get_user_permissions(&self, channel_name: &str, user_id: &str) -> LegionResult<HashSet<Permission>> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 963 |     async fn get_channel_settings(&self, channel_name: &str) -> LegionResult<ChannelSettings> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 973 |     pub async fn process_scheduled_operations(&self) -> LegionResult<usize> {
[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<String> },
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 17 |     Names(Vec<String>),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 18 |     List(Option<Vec<String>>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     Who(Option<String>),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 26 |     Whois(Vec<String>),
[INFO] [stdout] 27 |     Whowas(String, Option<i32>),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     Kick { channel: String, user: String, reason: Option<String> },
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 32 |     Mode { target: String, modes: Option<String>, params: Vec<String> },
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 33 |     Invite { nick: String, channel: String },
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     Motd(Option<String>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 37 |     Version(Option<String>),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 38 |     Stats(Option<String>, Option<String>),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 39 |     Time(Option<String>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 40 |     Info(Option<String>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     Account(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 46 |     Monitor { subcommand: String, targets: Vec<String> },
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 47 |     Metadata { target: String, subcommand: String, params: Vec<String> },
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 48 |     TagMsg { target: String },
[INFO] [stdout] 49 |     Batch { reference: String, batch_type: Option<String>, params: Vec<String> },
[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<String, Option<String>>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn to_tags(&self) -> HashMap<String, Option<String>> {
[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<String>) -> 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<BanEntry> {
[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<Self> {
[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<String, AuthError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn verify_password(password: &str, hash: &str) -> Result<bool, AuthError> {
[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<String, AuthError> {
[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<u8> {
[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<u8> {
[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<u8> {
[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<Regex> = 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<Regex> = 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<char>,
[INFO] [stdout] 8 |     pub joined_at: DateTime<Utc>,
[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<Utc>,
[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<Utc>,
[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<char>, Vec<char>) {
[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<impl AsRef<Path>>) -> Result<Self, ConfigError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 4m 47s
[INFO] running `Command { std: "docker" "inspect" "dfab56ae6b0f8aa16424c5a3bd1a4d3cc400ece7640beee40010381734c0e7bb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "dfab56ae6b0f8aa16424c5a3bd1a4d3cc400ece7640beee40010381734c0e7bb", kill_on_drop: false }`
[INFO] [stdout] dfab56ae6b0f8aa16424c5a3bd1a4d3cc400ece7640beee40010381734c0e7bb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+beta-2025-09-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] cdfb6a0287beb2b0341251ca9375423c74bbac2eb7b50d1ff8f8318c83d0cd65
[INFO] running `Command { std: "docker" "start" "-a" "cdfb6a0287beb2b0341251ca9375423c74bbac2eb7b50d1ff8f8318c83d0cd65", 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 linux-raw-sys v0.9.4
[INFO] [stderr]    Compiling half v2.6.0
[INFO] [stderr]    Compiling mockall_derive v0.13.1
[INFO] [stderr]    Compiling clap_lex v0.7.5
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling raw-cpuid v11.5.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling clap_builder v4.5.42
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling chrono v0.4.41
[INFO] [stderr]    Compiling atoi v2.0.0
[INFO] [stderr]    Compiling ron v0.8.1
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling sqlx-core v0.8.6
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling quanta v0.12.6
[INFO] [stderr]    Compiling clap v4.5.42
[INFO] [stderr]    Compiling tempfile v3.20.0
[INFO] [stderr]    Compiling rayon v1.10.0
[INFO] [stderr]    Compiling rusty-fork v0.3.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 is-terminal v0.4.16
[INFO] [stderr]    Compiling downcast v0.11.0
[INFO] [stderr]    Compiling fragile v2.0.1
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling config v0.14.1
[INFO] [stderr]    Compiling governor v0.8.1
[INFO] [stderr]    Compiling proptest v1.7.0
[INFO] [stderr]    Compiling legion-protocol v0.1.0
[INFO] [stderr]    Compiling sqlx-postgres v0.8.6
[INFO] [stderr]    Compiling sqlx-sqlite v0.8.6
[INFO] [stderr]    Compiling mockall v0.13.1
[INFO] [stderr]    Compiling criterion v0.5.1
[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<u8>) -> 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<u8>) -> 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<ActivityEntry>,
[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<Message>,
[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<ChannelMessage>,
[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<ServerMessage>,
[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<RwLock<ServerState>>) -> 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<String>) -> 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<Self, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub async fn connect_sqlite(url: &str) -> Result<Self, DatabaseError> {
[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<User, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub async fn get_user_by_nickname(&self, nickname: &str) -> Result<Option<User>, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub async fn get_user_by_id(&self, id: &str) -> Result<Option<User>, 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<User, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub async fn create_channel(&self, channel: &Channel) -> Result<Channel, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub async fn get_channel(&self, name: &str) -> Result<Option<Channel>, 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<Vec<Channel>, 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<Vec<ChannelMember>, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub async fn get_user_channels(&self, user_id: &str) -> Result<Vec<String>, 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<Vec<BanEntry>, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result<bool, DatabaseError> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub async fn get_server_config(&self) -> Result<ServerConfig, DatabaseError> {
[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<String>) -> 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<User, DatabaseError> {
[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<Option<User>, 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<Channel, DatabaseError> {
[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<Option<Channel>, 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<Vec<Channel>, 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<Vec<ChannelMember>, 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<Vec<String>, 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<Vec<BanEntry>, 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<bool, DatabaseError> {
[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<ServerConfig, DatabaseError> {
[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<HistorySelector>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 75 |         end: Option<HistorySelector>,
[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<RwLock<Identity>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 64 |     /// Active Legion channels
[INFO] [stdout] 65 |     channels: Arc<DashMap<String, AsyncPhalanxGroup>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 66 |     /// Client sessions with Legion capabilities
[INFO] [stdout] 67 |     sessions: Arc<DashMap<String, session::LegionSession>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 68 |     /// Key manager for rotation and storage
[INFO] [stdout] 69 |     key_manager: Arc<keys::KeyManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 70 |     /// Member manager for authentication and authorization
[INFO] [stdout] 71 |     member_manager: Arc<members::MemberManager>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 72 |     /// Federation manager for cross-server communication
[INFO] [stdout] 73 |     federation_manager: Arc<federation::FederationManager>,
[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<Capability>) -> 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<phalanx_crypto::group::GroupStats> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub async fn list_channels(&self) -> Vec<String> {
[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<Vec<u8>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec<u8>) -> LegionResult<Strin...
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub async fn handle_key_rotation(&self, channel_name: String, admin_id: String) -> LegionResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult<ChannelInfo> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub async fn list_user_channels(&self, user_id: &str) -> LegionResult<Vec<ChannelSummary>> {
[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<u8>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 29 |     /// Backup storage handler
[INFO] [stdout] 30 |     backup_handler: Option<Box<dyn BackupHandler>>,
[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<KeyRotationInfo>,
[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<Option<KeyRotationInfo>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     async fn list_backups(&self, channel: &str) -> LegionResult<Vec<u64>>;
[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<dyn BackupHandler>) {
[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<Option<KeyRotationInfo>> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult<Option<KeyRotationInfo>> {
[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<bool> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub async fn channel_stats(&self, channel: &str) -> LegionResult<ChannelKeyStats> {
[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<HashMap<String, Vec<Invitation>>>,
[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<String>,
[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<String, String>,
[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<bool> {
[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<ChannelStats> {
[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<Vec<String>> {
[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<Identity>,
[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<Identity> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub async fn public_key(&self) -> LegionResult<PublicKey> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn age(&self) -> Duration {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn capabilities(&self) -> &HashSet<Capability> {
[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<phalanx_crypto::protocol::HandshakeMessage> {
[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<HashMap<String, BridgeConfig>>,
[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<u8>) -> LegionResult<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec<u8>) -> 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<Vec<ScheduledOperation>>,
[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<String, RateState>,
[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<ExtendedChannelInfo> {
[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<usize> {
[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<String> },
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 17 |     Names(Vec<String>),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 18 |     List(Option<Vec<String>>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     Who(Option<String>),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 26 |     Whois(Vec<String>),
[INFO] [stdout] 27 |     Whowas(String, Option<i32>),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     Kick { channel: String, user: String, reason: Option<String> },
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 32 |     Mode { target: String, modes: Option<String>, params: Vec<String> },
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 33 |     Invite { nick: String, channel: String },
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     Motd(Option<String>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 37 |     Version(Option<String>),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 38 |     Stats(Option<String>, Option<String>),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 39 |     Time(Option<String>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 40 |     Info(Option<String>),
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     Account(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 46 |     Monitor { subcommand: String, targets: Vec<String> },
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 47 |     Metadata { target: String, subcommand: String, params: Vec<String> },
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 48 |     TagMsg { target: String },
[INFO] [stdout] 49 |     Batch { reference: String, batch_type: Option<String>, params: Vec<String> },
[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<String, Option<String>>) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn to_tags(&self) -> HashMap<String, Option<String>> {
[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<String>) -> 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<BanEntry> {
[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<Self> {
[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<String, AuthError> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub fn verify_password(password: &str, hash: &str) -> Result<bool, AuthError> {
[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<String, AuthError> {
[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<u8> {
[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<u8> {
[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<u8> {
[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<Regex> = 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<char>,
[INFO] [stdout] 8 |     pub joined_at: DateTime<Utc>,
[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<Utc>,
[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<Utc>,
[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<char>, Vec<char>) {
[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<impl AsRef<Path>>) -> Result<Self, ConfigError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 36s
[INFO] running `Command { std: "docker" "inspect" "cdfb6a0287beb2b0341251ca9375423c74bbac2eb7b50d1ff8f8318c83d0cd65", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "cdfb6a0287beb2b0341251ca9375423c74bbac2eb7b50d1ff8f8318c83d0cd65", kill_on_drop: false }`
[INFO] [stdout] cdfb6a0287beb2b0341251ca9375423c74bbac2eb7b50d1ff8f8318c83d0cd65
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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" "+beta-2025-09-21" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 566a9f9c2b83b5ab437008d1dead8c8f14f8d6811bbf0e615ba644386d4b75b5
[INFO] running `Command { std: "docker" "start" "-a" "566a9f9c2b83b5ab437008d1dead8c8f14f8d6811bbf0e615ba644386d4b75b5", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `bytes::BytesMut`
[INFO] [stderr]  --> src/actors/connection.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use bytes::BytesMut;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `timeout`
[INFO] [stderr]   --> src/actors/connection.rs:10:29
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tokio::time::{interval, timeout};
[INFO] [stderr]    |                             ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `trace` and `warn`
[INFO] [stderr]   --> src/actors/connection.rs:13:35
[INFO] [stderr]    |
[INFO] [stderr] 13 | use tracing::{debug, error, info, warn, trace};
[INFO] [stderr]    |                                   ^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::collections::HashMap`
[INFO] [stderr]  --> src/actors/channel.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::collections::HashMap;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `warn`
[INFO] [stderr]  --> src/actors/channel.rs:6:28
[INFO] [stderr]   |
[INFO] [stderr] 6 | use tracing::{debug, info, warn};
[INFO] [stderr]   |                            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ChannelMember`
[INFO] [stderr]  --> src/actors/channel.rs:9:29
[INFO] [stderr]   |
[INFO] [stderr] 9 | use crate::state::{Channel, ChannelMember, ServerState};
[INFO] [stderr]   |                             ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `self::channel::ChannelActor`
[INFO] [stderr]  --> src/actors/mod.rs:6:9
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub use self::channel::ChannelActor;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `info`
[INFO] [stderr]  --> src/commands/mod.rs:4:22
[INFO] [stderr]   |
[INFO] [stderr] 4 | use tracing::{debug, info};
[INFO] [stderr]   |                      ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Reply`
[INFO] [stderr]  --> src/commands/handlers/notice.rs:3:32
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                                ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Message` and `Reply`
[INFO] [stderr]  --> src/commands/handlers/who_test.rs:3:23
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                       ^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Message` and `Reply`
[INFO] [stderr]  --> src/commands/handlers/topic_test.rs:3:23
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                       ^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Message` and `Reply`
[INFO] [stderr]  --> src/commands/handlers/mode_test.rs:3:23
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                       ^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Message` and `Reply`
[INFO] [stderr]  --> src/commands/handlers/kick_test.rs:3:23
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                       ^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Reply`
[INFO] [stderr]  --> src/commands/handlers/list.rs:3:32
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                                ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Message` and `Reply`
[INFO] [stderr]  --> src/commands/handlers/list_test.rs:3:23
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                       ^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Reply`
[INFO] [stderr]  --> src/commands/handlers/nick.rs:4:32
[INFO] [stderr]   |
[INFO] [stderr] 4 | use crate::protocol::{Message, Reply};
[INFO] [stderr]   |                                ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `HistoryItem` and `MessageType`
[INFO] [stderr]  --> src/commands/handlers/chathistory.rs:5:22
[INFO] [stderr]   |
[INFO] [stderr] 5 | use crate::history::{HistoryItem, HistoryQuery, QueryResult, MessageType};
[INFO] [stderr]   |                      ^^^^^^^^^^^                             ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `StandardReply`
[INFO] [stderr]  --> src/commands/handlers/chathistory.rs:6:41
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::commands::standard_replies::{StandardReply, common};
[INFO] [stderr]   |                                         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/commands/handlers/query.rs:17:13
[INFO] [stderr]    |
[INFO] [stderr] 17 |             (conn.nickname.clone().unwrap_or_else(|| "*".to_string()))
[INFO] [stderr]    |             ^                                                        ^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 17 -             (conn.nickname.clone().unwrap_or_else(|| "*".to_string()))
[INFO] [stderr] 17 +             conn.nickname.clone().unwrap_or_else(|| "*".to_string())
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `VecDeque`
[INFO] [stderr]  --> src/history/mod.rs:2:34
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::collections::{BTreeMap, VecDeque};
[INFO] [stderr]   |                                  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::RwLock`
[INFO] [stderr]  --> src/history/mod.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::sync::RwLock;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `format_timestamp`
[INFO] [stderr]  --> src/history/storage.rs:1:39
[INFO] [stderr]   |
[INFO] [stderr] 1 | use super::{HistoryItem, MessageType, format_timestamp};
[INFO] [stderr]   |                                       ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `HistoryConfig`
[INFO] [stderr]   --> src/history/mod.rs:10:35
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub use storage::{HistoryStorage, HistoryConfig};
[INFO] [stderr]    |                                   ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `is_legion_encrypted_channel`
[INFO] [stderr]  --> src/legion/channels.rs:6:30
[INFO] [stderr]   |
[INFO] [stderr] 6 | use legion_protocol::utils::{is_legion_encrypted_channel, ChannelType, get_channel_type};
[INFO] [stderr]   |                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Identity`
[INFO] [stderr]  --> src/legion/keys.rs:6:22
[INFO] [stderr]   |
[INFO] [stderr] 6 | use phalanx_crypto::{Identity, protocol::KeyRotationMessage};
[INFO] [stderr]   |                      ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Identity` and `protocol::KeyRotationMessage`
[INFO] [stderr]    --> src/legion/keys.rs:412:26
[INFO] [stderr]     |
[INFO] [stderr] 412 |     use phalanx_crypto::{Identity, protocol::KeyRotationMessage};
[INFO] [stderr]     |                          ^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Identity`
[INFO] [stderr]  --> src/legion/federation.rs:6:22
[INFO] [stderr]   |
[INFO] [stderr] 6 | use phalanx_crypto::{Identity, PublicKey};
[INFO] [stderr]   |                      ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `PublicKey`
[INFO] [stderr]  --> src/legion/channel_manager.rs:9:32
[INFO] [stderr]   |
[INFO] [stderr] 9 | use phalanx_crypto::{Identity, PublicKey};
[INFO] [stderr]   |                                ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `debug`, `error`, and `warn`
[INFO] [stderr]   --> src/legion/channel_manager.rs:14:15
[INFO] [stderr]    |
[INFO] [stderr] 14 | use tracing::{debug, info, warn, error};
[INFO] [stderr]    |               ^^^^^        ^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `IronSession` and `IronVersion`
[INFO] [stderr]   --> src/legion/mod.rs:14:23
[INFO] [stderr]    |
[INFO] [stderr] 14 | use legion_protocol::{IronSession, IronVersion, Capability};
[INFO] [stderr]    |                       ^^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `PhalanxGroup`
[INFO] [stderr]   --> src/legion/mod.rs:15:32
[INFO] [stderr]    |
[INFO] [stderr] 15 | use phalanx_crypto::{Identity, PhalanxGroup, AsyncPhalanxGroup};
[INFO] [stderr]    |                                ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Command as ProtocolCommand`
[INFO] [stderr]  --> src/protocol/mod.rs:2:35
[INFO] [stderr]   |
[INFO] [stderr] 2 | use legion_protocol::{IrcMessage, Command as ProtocolCommand, IronError};
[INFO] [stderr]   |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::collections::HashMap`
[INFO] [stderr]  --> src/protocol/mod.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::collections::HashMap;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `thiserror::Error`
[INFO] [stderr]  --> src/protocol/mod.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use thiserror::Error;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Buf`
[INFO] [stderr]  --> src/protocol/codec.rs:1:13
[INFO] [stderr]   |
[INFO] [stderr] 1 | use bytes::{Buf, BufMut, BytesMut};
[INFO] [stderr]   |             ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::str::FromStr`
[INFO] [stderr]  --> src/protocol/commands.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::str::FromStr;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CapabilityHandler`, `CapabilitySet`, `Capability`, `constants`, and `utils`
[INFO] [stderr]   --> src/protocol/mod.rs:23:5
[INFO] [stderr]    |
[INFO] [stderr] 23 |     Capability, CapabilitySet, CapabilityHandler,
[INFO] [stderr]    |     ^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 24 |     constants, utils, Reply
[INFO] [stderr]    |     ^^^^^^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `SaslAuth` and `SaslMechanism`
[INFO] [stderr]   --> src/protocol/mod.rs:27:33
[INFO] [stderr]    |
[INFO] [stderr] 27 | pub use legion_protocol::sasl::{SaslAuth, SaslMechanism};
[INFO] [stderr]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `legion_protocol::bleeding_edge`
[INFO] [stderr]   --> src/protocol/mod.rs:30:9
[INFO] [stderr]    |
[INFO] [stderr] 30 | pub use legion_protocol::bleeding_edge;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Argon2` and `PasswordHash`
[INFO] [stderr]  --> src/security/auth.rs:1:14
[INFO] [stderr]   |
[INFO] [stderr] 1 | use argon2::{Argon2, PasswordHash};
[INFO] [stderr]   |              ^^^^^^  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `PasswordHasher as ArgonPasswordHasher`, `SaltString`, and `rand_core::OsRng`
[INFO] [stderr]  --> src/security/auth.rs:2:29
[INFO] [stderr]   |
[INFO] [stderr] 2 | use argon2::password_hash::{rand_core::OsRng, SaltString, PasswordHasher as ArgonPasswordHasher};
[INFO] [stderr]   |                             ^^^^^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `AuthMethod`, `SaslMechanism`, and `authenticate`
[INFO] [stderr]   --> src/security/mod.rs:14:22
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub use self::auth::{AuthMethod, SaslMechanism, authenticate};
[INFO] [stderr]    |                      ^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `validate_message` and `validate_nickname`
[INFO] [stderr]   --> src/security/mod.rs:15:28
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub use self::validation::{validate_nickname, validate_channel_name, validate_message};
[INFO] [stderr]    |                            ^^^^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead
[INFO] [stderr]   --> src/legion/session.rs:45:70
[INFO] [stderr]    |
[INFO] [stderr] 45 |             matches!(cap, Capability::LegionProtocolV1 | Capability::IronProtocolV1)
[INFO] [stderr]    |                                                                      ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead
[INFO] [stderr]   --> src/legion/session.rs:52:58
[INFO] [stderr]    |
[INFO] [stderr] 52 |             } else if capabilities.contains(&Capability::IronProtocolV1) {
[INFO] [stderr]    |                                                          ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead
[INFO] [stderr]   --> src/legion/session.rs:74:49
[INFO] [stderr]    |
[INFO] [stderr] 74 |         self.capabilities.contains(&Capability::IronProtocolV1)
[INFO] [stderr]    |                                                 ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/actors/connection.rs:49:17
[INFO] [stderr]    |
[INFO] [stderr] 49 |             let mut state = server_state.write().await;
[INFO] [stderr]    |                 ----^^^^^
[INFO] [stderr]    |                 |
[INFO] [stderr]    |                 help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/actors/connection.rs:128:17
[INFO] [stderr]     |
[INFO] [stderr] 128 |             let mut state = self.server_state.write().await;
[INFO] [stderr]     |                 ----^^^^^
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `cap_version`
[INFO] [stderr]    --> src/actors/connection.rs:183:21
[INFO] [stderr]     |
[INFO] [stderr] 183 |                 let cap_version = if !params.is_empty() {
[INFO] [stderr]     |                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cap_version`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/actors/connection.rs:244:33
[INFO] [stderr]     |
[INFO] [stderr] 244 | ...                   let mut state = self.server_state.write().await;
[INFO] [stderr]     |                           ----^^^^^
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/actors/connection.rs:299:17
[INFO] [stderr]     |
[INFO] [stderr] 299 |             let mut state = self.server_state.write().await;
[INFO] [stderr]     |                 ----^^^^^
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/actors/connection.rs:349:17
[INFO] [stderr]     |
[INFO] [stderr] 349 |             let mut state = self.server_state.write().await;
[INFO] [stderr]     |                 ----^^^^^
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/join.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 14 |     let mut state = server_state.write().await;
[INFO] [stderr]    |         ----^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/part.rs:13:9
[INFO] [stderr]    |
[INFO] [stderr] 13 |     let mut state = server_state.write().await;
[INFO] [stderr]    |         ----^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `user`
[INFO] [stderr]   --> src/commands/handlers/privmsg.rs:15:16
[INFO] [stderr]    |
[INFO] [stderr] 15 |     let (nick, user, host, has_echo_message, msg_id, privmsg) = {
[INFO] [stderr]    |                ^^^^ help: if this is intentional, prefix it with an underscore: `_user`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `host`
[INFO] [stderr]   --> src/commands/handlers/privmsg.rs:15:22
[INFO] [stderr]    |
[INFO] [stderr] 15 |     let (nick, user, host, has_echo_message, msg_id, privmsg) = {
[INFO] [stderr]    |                      ^^^^ help: if this is intentional, prefix it with an underscore: `_host`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `user`
[INFO] [stderr]   --> src/commands/handlers/notice.rs:21:16
[INFO] [stderr]    |
[INFO] [stderr] 21 |     let (nick, user, host, has_echo_message, msg_id, notice_msg) = {
[INFO] [stderr]    |                ^^^^ help: if this is intentional, prefix it with an underscore: `_user`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `host`
[INFO] [stderr]   --> src/commands/handlers/notice.rs:21:22
[INFO] [stderr]    |
[INFO] [stderr] 21 |     let (nick, user, host, has_echo_message, msg_id, notice_msg) = {
[INFO] [stderr]    |                      ^^^^ help: if this is intentional, prefix it with an underscore: `_host`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `member_nick`
[INFO] [stderr]   --> src/commands/handlers/who.rs:37:37
[INFO] [stderr]    |
[INFO] [stderr] 37 |                         if let Some(member_nick) = &member_conn.nickname {
[INFO] [stderr]    |                                     ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_member_nick`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `target_conn`
[INFO] [stderr]   --> src/commands/handlers/who.rs:66:25
[INFO] [stderr]    |
[INFO] [stderr] 66 |             if let Some(target_conn) = state.connections.get(&target_id) {
[INFO] [stderr]    |                         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_conn`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/who_test.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 21 |     let mut state_guard = state.write().await;
[INFO] [stderr]    |         ----^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/topic.rs:20:9
[INFO] [stderr]    |
[INFO] [stderr] 20 |     let mut state = server_state.write().await;
[INFO] [stderr]    |         ----^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/topic_test.rs:19:9
[INFO] [stderr]    |
[INFO] [stderr] 19 |     let mut state_guard = state.write().await;
[INFO] [stderr]    |         ----^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/mode.rs:82:9
[INFO] [stderr]    |
[INFO] [stderr] 82 |     let mut mode_args = mode_params[1..].to_vec();
[INFO] [stderr]    |         ----^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/mode_test.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 21 |     let mut state_guard = state.write().await;
[INFO] [stderr]    |         ----^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/mode_test.rs:49:9
[INFO] [stderr]    |
[INFO] [stderr] 49 |     let mut channel = Channel::new("#test".to_string());
[INFO] [stderr]    |         ----^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/kick.rs:25:9
[INFO] [stderr]    |
[INFO] [stderr] 25 |     let mut state = server_state.write().await;
[INFO] [stderr]    |         ----^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/kick_test.rs:22:13
[INFO] [stderr]    |
[INFO] [stderr] 22 |         let mut state_guard = state.write().await;
[INFO] [stderr]    |             ----^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/list_test.rs:19:9
[INFO] [stderr]    |
[INFO] [stderr] 19 |     let mut state_guard = state.write().await;
[INFO] [stderr]    |         ----^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/list_test.rs:57:9
[INFO] [stderr]    |
[INFO] [stderr] 57 |     let mut empty_channel = Channel::new("#empty".to_string());
[INFO] [stderr]    |         ----^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/list_test.rs:60:9
[INFO] [stderr]    |
[INFO] [stderr] 60 |     let mut no_topic_channel = Channel::new("#notopic".to_string());
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/commands/handlers/nick.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 16 |     let mut state = server_state.write().await;
[INFO] [stderr]    |         ----^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `policy`
[INFO] [stderr]    --> src/legion/keys.rs:259:17
[INFO] [stderr]     |
[INFO] [stderr] 259 |             let policy = drop(keys);
[INFO] [stderr]     |                 ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 259 |             let _policy = drop(keys);
[INFO] [stderr]     |                 +
[INFO] [stderr] help: you might have meant to pattern match on the similarly named constant `_`
[INFO] [stderr]     |
[INFO] [stderr] 259 -             let policy = drop(keys);
[INFO] [stderr] 259 +             let utils::config::_ = drop(keys);
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `channel`
[INFO] [stderr]    --> src/legion/keys.rs:339:18
[INFO] [stderr]     |
[INFO] [stderr] 339 |             for (channel, channel_keys) in keys.iter_mut() {
[INFO] [stderr]     |                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `message`
[INFO] [stderr]    --> src/legion/federation.rs:298:84
[INFO] [stderr]     |
[INFO] [stderr] 298 |     pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec<u8>) -> LegionResult<()> {
[INFO] [stderr]     |                                                                                    ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `message`
[INFO] [stderr]    --> src/legion/federation.rs:319:87
[INFO] [stderr]     |
[INFO] [stderr] 319 |     pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec<u8>) -> LegionResult<()> {
[INFO] [stderr]     |                                                                                       ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message`
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `cleaned_servers` is never read
[INFO] [stderr]    --> src/legion/federation.rs:361:17
[INFO] [stderr]     |
[INFO] [stderr] 361 |         let mut cleaned_servers = 0;
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being read?
[INFO] [stderr]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `member`
[INFO] [stderr]    --> src/legion/channel_manager.rs:525:33
[INFO] [stderr]     |
[INFO] [stderr] 525 |                     if let Some(member) = channel.members.remove(target_user) {
[INFO] [stderr]     |                                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_member`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `operator_identity`
[INFO] [stderr]    --> src/legion/channel_manager.rs:753:9
[INFO] [stderr]     |
[INFO] [stderr] 753 |         operator_identity: &Identity,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_operator_identity`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `channel`
[INFO] [stderr]    --> src/legion/mod.rs:229:13
[INFO] [stderr]     |
[INFO] [stderr] 229 |         let channel = self.channels.get(&channel_name)
[INFO] [stderr]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/commands/handlers/who_test.rs:271:13
[INFO] [stderr]     |
[INFO] [stderr] 271 |         let mut state_guard = state.write().await;
[INFO] [stderr]     |             ----^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `user_id`
[INFO] [stderr]    --> src/commands/handlers/topic_test.rs:124:17
[INFO] [stderr]     |
[INFO] [stderr] 124 |     let (state, user_id, member_id) = setup_test_state().await;
[INFO] [stderr]     |                 ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_user_id`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/commands/handlers/topic_test.rs:180:13
[INFO] [stderr]     |
[INFO] [stderr] 180 |         let mut channel = state_guard.channels.get_mut("#test").unwrap();
[INFO] [stderr]     |             ----^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/commands/handlers/kick_test.rs:126:17
[INFO] [stderr]     |
[INFO] [stderr] 126 |             let mut state_guard = state.write().await;
[INFO] [stderr]     |                 ----^^^^^^^^^^^
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/commands/handlers/list_test.rs:343:13
[INFO] [stderr]     |
[INFO] [stderr] 343 |         let mut state_guard = state.write().await;
[INFO] [stderr]     |             ----^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: type `members::ChannelSettings` is more private than the item `members::ChannelStats::settings`
[INFO] [stderr]    --> src/legion/members.rs:635:5
[INFO] [stderr]     |
[INFO] [stderr] 635 |     pub settings: ChannelSettings,
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `members::ChannelStats::settings` is reachable at visibility `pub(crate)`
[INFO] [stderr]     |
[INFO] [stderr] note: but type `members::ChannelSettings` is only usable at visibility `pub(self)`
[INFO] [stderr]    --> src/legion/members.rs:145:1
[INFO] [stderr]     |
[INFO] [stderr] 145 | struct ChannelSettings {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: type `federation::TrustLevel` is more private than the item `federation::FederationManager::add_federated_server`
[INFO] [stderr]    --> src/legion/federation.rs:185:5
[INFO] [stderr]     |
[INFO] [stderr] 185 |     pub async fn add_federated_server(&self, hostname: String, public_key: PublicKey, trust_level: TrustLevel) -> LegionResult<()> {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `federation::FederationManager::add_federated_server` is reachable at visibility `pub(crate)`
[INFO] [stderr]     |
[INFO] [stderr] note: but type `federation::TrustLevel` is only usable at visibility `pub(self)`
[INFO] [stderr]    --> src/legion/federation.rs:51:1
[INFO] [stderr]     |
[INFO] [stderr]  51 | enum TrustLevel {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type `FederationStatus` is more private than the item `federation::FederationManager::update_server_status`
[INFO] [stderr]    --> src/legion/federation.rs:227:5
[INFO] [stderr]     |
[INFO] [stderr] 227 |     pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `federation::FederationManager::update_server_status` is reachable at visibility `pub(crate)`
[INFO] [stderr]     |
[INFO] [stderr] note: but type `FederationStatus` is only usable at visibility `pub(self)`
[INFO] [stderr]    --> src/legion/federation.rs:42:1
[INFO] [stderr]     |
[INFO] [stderr]  42 | enum FederationStatus {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type `ActivityEntry` is more private than the item `ExtendedChannelInfo::recent_activity`
[INFO] [stderr]    --> src/legion/channel_manager.rs:166:5
[INFO] [stderr]     |
[INFO] [stderr] 166 |     pub recent_activity: Vec<ActivityEntry>,
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `ExtendedChannelInfo::recent_activity` is reachable at visibility `pub(crate)`
[INFO] [stderr]     |
[INFO] [stderr] note: but type `ActivityEntry` is only usable at visibility `pub(self)`
[INFO] [stderr]    --> src/legion/channel_manager.rs:124:1
[INFO] [stderr]     |
[INFO] [stderr] 124 | struct ActivityEntry {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PING_TIMEOUT` is never used
[INFO] [stderr]   --> src/actors/connection.rs:20:7
[INFO] [stderr]    |
[INFO] [stderr] 20 | const PING_TIMEOUT: Duration = Duration::from_secs(60);
[INFO] [stderr]    |       ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `tx` is never read
[INFO] [stderr]   --> src/actors/connection.rs:29:5
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub struct ConnectionActor {
[INFO] [stderr]    |            --------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 29 |     tx: mpsc::Sender<Message>,
[INFO] [stderr]    |     ^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `tx` is never read
[INFO] [stderr]   --> src/actors/channel.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub struct ChannelActor {
[INFO] [stderr]    |            ------------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 16 |     tx: mpsc::Sender<ChannelMessage>,
[INFO] [stderr]    |     ^^
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Invite` is never constructed
[INFO] [stderr]   --> src/actors/channel.rs:47:5
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub enum ChannelMessage {
[INFO] [stderr]    |          -------------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 47 |     Invite {
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ChannelMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `tx` is never read
[INFO] [stderr]   --> src/actors/server.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub struct ServerActor {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 15 |     tx: mpsc::Sender<ServerMessage>,
[INFO] [stderr]    |     ^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `ConnectionCommand`, `CreateChannel`, `RemoveChannel`, `BroadcastMessage`, and `ServerNotice` are never constructed
[INFO] [stderr]   --> src/actors/server.rs:20:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub enum ServerMessage {
[INFO] [stderr]    |          ------------- variants in this enum
[INFO] [stderr] 20 |     ConnectionCommand {
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 24 |     CreateChannel {
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 28 |     RemoveChannel {
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 31 |     BroadcastMessage {
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 35 |     ServerNotice {
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CommandProcessor` is never constructed
[INFO] [stderr]   --> src/commands/mod.rs:12:12
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct CommandProcessor {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `process` are never used
[INFO] [stderr]   --> src/commands/mod.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 16 | impl CommandProcessor {
[INFO] [stderr]    | --------------------- associated items in this implementation
[INFO] [stderr] 17 |     pub fn new(server_state: Arc<RwLock<ServerState>>) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 21 |     pub async fn process(
[INFO] [stderr]    |                  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_notice` is never used
[INFO] [stderr]  --> src/commands/handlers/notice.rs:8:14
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub async fn handle_notice(
[INFO] [stderr]   |              ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_oper` is never used
[INFO] [stderr]  --> src/commands/handlers/oper.rs:6:14
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub async fn handle_oper(
[INFO] [stderr]   |              ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_nick` is never used
[INFO] [stderr]  --> src/commands/handlers/nick.rs:9:14
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub async fn handle_nick(
[INFO] [stderr]   |              ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Warn` and `Note` are never constructed
[INFO] [stderr]   --> src/commands/standard_replies.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr]  8 | pub enum StandardReplyType {
[INFO] [stderr]    |          ----------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 12 |     Warn,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 13 |     /// NOTE - Provides informational messages
[INFO] [stderr] 14 |     Note,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `StandardReplyType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple variants are never constructed
[INFO] [stderr]   --> src/commands/standard_replies.rs:32:5
[INFO] [stderr]    |
[INFO] [stderr] 29 | pub enum StandardReplyCode {
[INFO] [stderr]    |          ----------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 32 |     AccountRequiredToConnect,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 38 |     NeedMoreParams,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 39 |     /// Message could not be retrieved
[INFO] [stderr] 40 |     MessageError,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 41 |     /// Unknown error occurred
[INFO] [stderr] 42 |     UnknownError,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 46 |     CannotSendToChan,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 50 |     NotOnChannel,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 51 |     /// Channel is invite-only
[INFO] [stderr] 52 |     InviteOnlyChan,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 53 |     /// Channel key required
[INFO] [stderr] 54 |     BadChannelKey,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 55 |     /// Channel is full
[INFO] [stderr] 56 |     ChannelIsFull,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 57 |     /// Banned from channel
[INFO] [stderr] 58 |     BannedFromChan,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 62 |     NoSuchNick,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 63 |     /// Nickname in use
[INFO] [stderr] 64 |     NicknameInUse,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 65 |     /// Invalid nickname
[INFO] [stderr] 66 |     InvalidNickname,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 70 |     SaslFail,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 71 |     /// Invalid credentials provided
[INFO] [stderr] 72 |     InvalidCredentials,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 73 |     /// Registration failed
[INFO] [stderr] 74 |     RegFail,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 75 |     /// Account registration callback invalid
[INFO] [stderr] 76 |     RegInvalidCallback,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 77 |     /// Account already registered
[INFO] [stderr] 78 |     AlreadyRegistered,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 82 |     UnknownCommand,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 83 |     /// Command disabled
[INFO] [stderr] 84 |     CommandDisabled,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 88 |     RateLimitExceeded,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 89 |     /// Resource limit exceeded
[INFO] [stderr] 90 |     ResourceLimit,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 93 |     Custom(String),
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `StandardReplyCode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `warn`, `note`, and `with_context` are never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:157:12
[INFO] [stderr]     |
[INFO] [stderr] 144 | impl StandardReply {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 157 |     pub fn warn(command: &str, code: StandardReplyCode, description: &str) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub fn note(command: &str, code: StandardReplyCode, description: &str) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 179 |     pub fn with_context(mut self, context: Vec<String>) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `no_such_channel` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:225:12
[INFO] [stderr]     |
[INFO] [stderr] 225 |     pub fn no_such_channel(command: &str, channel: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `no_such_nick` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:231:12
[INFO] [stderr]     |
[INFO] [stderr] 231 |     pub fn no_such_nick(command: &str, nick: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `not_on_channel` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:237:12
[INFO] [stderr]     |
[INFO] [stderr] 237 |     pub fn not_on_channel(command: &str, channel: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `cannot_send_to_chan` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:243:12
[INFO] [stderr]     |
[INFO] [stderr] 243 |     pub fn cannot_send_to_chan(command: &str, channel: &str, reason: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `nickname_in_use` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:249:12
[INFO] [stderr]     |
[INFO] [stderr] 249 |     pub fn nickname_in_use(command: &str, nick: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `invalid_nickname` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:255:12
[INFO] [stderr]     |
[INFO] [stderr] 255 |     pub fn invalid_nickname(command: &str, nick: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `unknown_command` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:261:12
[INFO] [stderr]     |
[INFO] [stderr] 261 |     pub fn unknown_command(command: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `rate_limit_exceeded` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:267:12
[INFO] [stderr]     |
[INFO] [stderr] 267 |     pub fn rate_limit_exceeded(command: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `deprecated_command` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:272:12
[INFO] [stderr]     |
[INFO] [stderr] 272 |     pub fn deprecated_command(command: &str, alternative: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `info_note` is never used
[INFO] [stderr]    --> src/commands/standard_replies.rs:278:12
[INFO] [stderr]     |
[INFO] [stderr] 278 |     pub fn info_note(command: &str, message: &str) -> StandardReply {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `DatabaseError` is never used
[INFO] [stderr]   --> src/db/mod.rs:12:10
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub enum DatabaseError {
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `Database` is never used
[INFO] [stderr]   --> src/db/mod.rs:30:10
[INFO] [stderr]    |
[INFO] [stderr] 30 | pub enum Database {
[INFO] [stderr]    |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/db/mod.rs:36:18
[INFO] [stderr]     |
[INFO] [stderr]  35 | impl Database {
[INFO] [stderr]     | ------------- associated items in this implementation
[INFO] [stderr]  36 |     pub async fn connect_postgres(url: &str) -> Result<Self, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  41 |     pub async fn connect_sqlite(url: &str) -> Result<Self, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  46 |     pub async fn run_migrations(&self) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  52 |     pub async fn create_user(&self, user: &User) -> Result<User, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  56 |     pub async fn get_user_by_nickname(&self, nickname: &str) -> Result<Option<User>, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  60 |     pub async fn get_user_by_id(&self, id: &str) -> Result<Option<User>, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  64 |     pub async fn update_user(&self, user: &User) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  68 |     pub async fn authenticate_user(&self, nickname: &str, password: &str) -> Result<User, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  73 |     pub async fn create_channel(&self, channel: &Channel) -> Result<Channel, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  77 |     pub async fn get_channel(&self, name: &str) -> Result<Option<Channel>, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  81 |     pub async fn update_channel(&self, channel: &Channel) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub async fn delete_channel(&self, name: &str) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  89 |     pub async fn list_channels(&self) -> Result<Vec<Channel>, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  94 |     pub async fn add_channel_member(&self, member: &ChannelMember) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  98 |     pub async fn remove_channel_member(&self, channel: &str, user_id: &str) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 102 |     pub async fn get_channel_members(&self, channel: &str) -> Result<Vec<ChannelMember>, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 106 |     pub async fn get_user_channels(&self, user_id: &str) -> Result<Vec<String>, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 111 |     pub async fn add_ban(&self, ban: &BanEntry) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 115 |     pub async fn remove_ban(&self, channel: &str, mask: &str) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 119 |     pub async fn get_channel_bans(&self, channel: &str) -> Result<Vec<BanEntry>, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 123 |     pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result<bool, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 128 |     pub async fn get_server_config(&self) -> Result<ServerConfig, DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub async fn update_server_config(&self, config: &ServerConfig) -> Result<(), DatabaseError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `User` is never constructed
[INFO] [stderr]  --> src/db/models.rs:6:12
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub struct User {
[INFO] [stderr]   |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/db/models.rs:25:12
[INFO] [stderr]    |
[INFO] [stderr] 24 | impl User {
[INFO] [stderr]    | --------- associated function in this implementation
[INFO] [stderr] 25 |     pub fn new(nickname: String, username: String, realname: String, password_hash: String) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Channel` is never constructed
[INFO] [stderr]   --> src/db/models.rs:47:12
[INFO] [stderr]    |
[INFO] [stderr] 47 | pub struct Channel {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/db/models.rs:66:12
[INFO] [stderr]    |
[INFO] [stderr] 65 | impl Channel {
[INFO] [stderr]    | ------------ associated function in this implementation
[INFO] [stderr] 66 |     pub fn new(name: String, founder: Option<String>) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelMember` is never constructed
[INFO] [stderr]   --> src/db/models.rs:88:12
[INFO] [stderr]    |
[INFO] [stderr] 88 | pub struct ChannelMember {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `BanEntry` is never constructed
[INFO] [stderr]   --> src/db/models.rs:97:12
[INFO] [stderr]    |
[INFO] [stderr] 97 | pub struct BanEntry {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ServerConfig` is never constructed
[INFO] [stderr]    --> src/db/models.rs:107:12
[INFO] [stderr]     |
[INFO] [stderr] 107 | pub struct ServerConfig {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MessageLog` is never constructed
[INFO] [stderr]    --> src/db/models.rs:164:12
[INFO] [stderr]     |
[INFO] [stderr] 164 | pub struct MessageLog {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `OperatorCredential` is never constructed
[INFO] [stderr]    --> src/db/models.rs:175:12
[INFO] [stderr]     |
[INFO] [stderr] 175 | pub struct OperatorCredential {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_user` is never used
[INFO] [stderr]  --> src/db/queries/users.rs:3:14
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub async fn create_user(_db: &Database, user: &User) -> Result<User, DatabaseError> {
[INFO] [stderr]   |              ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_user_by_nickname` is never used
[INFO] [stderr]  --> src/db/queries/users.rs:8:14
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub async fn get_user_by_nickname(
[INFO] [stderr]   |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_user_by_id` is never used
[INFO] [stderr]   --> src/db/queries/users.rs:16:14
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub async fn get_user_by_id(_db: &Database, _id: &str) -> Result<Option<User>, DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `update_user` is never used
[INFO] [stderr]   --> src/db/queries/users.rs:21:14
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub async fn update_user(_db: &Database, _user: &User) -> Result<(), DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `authenticate_user` is never used
[INFO] [stderr]   --> src/db/queries/users.rs:26:14
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub async fn authenticate_user(
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_channel` is never used
[INFO] [stderr]  --> src/db/queries/channels.rs:3:14
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub async fn create_channel(_db: &Database, channel: &Channel) -> Result<Channel, DatabaseError> {
[INFO] [stderr]   |              ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_channel` is never used
[INFO] [stderr]  --> src/db/queries/channels.rs:8:14
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub async fn get_channel(_db: &Database, _name: &str) -> Result<Option<Channel>, DatabaseError> {
[INFO] [stderr]   |              ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `update_channel` is never used
[INFO] [stderr]   --> src/db/queries/channels.rs:13:14
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub async fn update_channel(_db: &Database, _channel: &Channel) -> Result<(), DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `delete_channel` is never used
[INFO] [stderr]   --> src/db/queries/channels.rs:18:14
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub async fn delete_channel(_db: &Database, _name: &str) -> Result<(), DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `list_channels` is never used
[INFO] [stderr]   --> src/db/queries/channels.rs:23:14
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub async fn list_channels(_db: &Database) -> Result<Vec<Channel>, DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `add_channel_member` is never used
[INFO] [stderr]   --> src/db/queries/channels.rs:28:14
[INFO] [stderr]    |
[INFO] [stderr] 28 | pub async fn add_channel_member(_db: &Database, _member: &ChannelMember) -> Result<(), DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `remove_channel_member` is never used
[INFO] [stderr]   --> src/db/queries/channels.rs:33:14
[INFO] [stderr]    |
[INFO] [stderr] 33 | pub async fn remove_channel_member(_db: &Database, _channel: &str, _user_id: &str) -> Result<(), DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_channel_members` is never used
[INFO] [stderr]   --> src/db/queries/channels.rs:38:14
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub async fn get_channel_members(_db: &Database, _channel: &str) -> Result<Vec<ChannelMember>, DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_user_channels` is never used
[INFO] [stderr]   --> src/db/queries/channels.rs:43:14
[INFO] [stderr]    |
[INFO] [stderr] 43 | pub async fn get_user_channels(_db: &Database, _user_id: &str) -> Result<Vec<String>, DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `add_ban` is never used
[INFO] [stderr]  --> src/db/queries/bans.rs:3:14
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub async fn add_ban(_db: &Database, _ban: &BanEntry) -> Result<(), DatabaseError> {
[INFO] [stderr]   |              ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `remove_ban` is never used
[INFO] [stderr]  --> src/db/queries/bans.rs:8:14
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub async fn remove_ban(_db: &Database, _channel: &str, _mask: &str) -> Result<(), DatabaseError> {
[INFO] [stderr]   |              ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_channel_bans` is never used
[INFO] [stderr]   --> src/db/queries/bans.rs:13:14
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub async fn get_channel_bans(_db: &Database, _channel: &str) -> Result<Vec<BanEntry>, DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_banned` is never used
[INFO] [stderr]   --> src/db/queries/bans.rs:18:14
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub async fn is_banned(_db: &Database, _channel: &str, _user_mask: &str) -> Result<bool, DatabaseError> {
[INFO] [stderr]    |              ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_server_config` is never used
[INFO] [stderr]  --> src/db/queries/config.rs:3:14
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub async fn get_server_config(_db: &Database) -> Result<ServerConfig, DatabaseError> {
[INFO] [stderr]   |              ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `update_server_config` is never used
[INFO] [stderr]  --> src/db/queries/config.rs:8:14
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub async fn update_server_config(_db: &Database, _config: &ServerConfig) -> Result<(), DatabaseError> {
[INFO] [stderr]   |              ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_schema_sql` is never used
[INFO] [stderr]  --> src/db/migrations.rs:3:8
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub fn create_schema_sql() -> &'static str {
[INFO] [stderr]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Config` is never constructed
[INFO] [stderr]   --> src/error.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr]  7 | pub enum CenturionError {
[INFO] [stderr]    |          -------------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 22 |     Config(String),
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CenturionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `has_msgid` and `timestamp_secs` are never used
[INFO] [stderr]   --> src/history/mod.rs:81:12
[INFO] [stderr]    |
[INFO] [stderr] 56 | impl HistoryItem {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 81 |     pub fn has_msgid(&self, msgid: &str) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 86 |     pub fn timestamp_secs(&self) -> u64 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `cleanup_old_messages` is never used
[INFO] [stderr]    --> src/history/storage.rs:286:12
[INFO] [stderr]     |
[INFO] [stderr] 195 | impl HistoryStorage {
[INFO] [stderr]     | ------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 286 |     pub fn cleanup_old_messages(&self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_empty` is never used
[INFO] [stderr]   --> src/history/queries.rs:33:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | impl HistorySelector {
[INFO] [stderr]    | -------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 33 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `start` and `end` are never read
[INFO] [stderr]   --> src/history/queries.rs:74:9
[INFO] [stderr]    |
[INFO] [stderr] 73 |     Targets {
[INFO] [stderr]    |     ------- fields in this variant
[INFO] [stderr] 74 |         start: Option<HistorySelector>,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 75 |         end: Option<HistorySelector>,
[INFO] [stderr]    |         ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `HistoryQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Key` is never constructed
[INFO] [stderr]   --> src/legion/mod.rs:44:5
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub enum LegionError {
[INFO] [stderr]    |          ----------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 44 |     Key(String),
[INFO] [stderr]    |     ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `LegionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `server_identity`, `channels`, `sessions`, `key_manager`, `member_manager`, and `federation_manager` are never read
[INFO] [stderr]   --> src/legion/mod.rs:63:5
[INFO] [stderr]    |
[INFO] [stderr] 61 | pub struct LegionManager {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] 62 |     /// Server identity for Legion operations
[INFO] [stderr] 63 |     server_identity: Arc<RwLock<Identity>>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 64 |     /// Active Legion channels
[INFO] [stderr] 65 |     channels: Arc<DashMap<String, AsyncPhalanxGroup>>,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 66 |     /// Client sessions with Legion capabilities
[INFO] [stderr] 67 |     sessions: Arc<DashMap<String, session::LegionSession>>,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 68 |     /// Key manager for rotation and storage
[INFO] [stderr] 69 |     key_manager: Arc<keys::KeyManager>,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 70 |     /// Member manager for authentication and authorization
[INFO] [stderr] 71 |     member_manager: Arc<members::MemberManager>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 72 |     /// Federation manager for cross-server communication
[INFO] [stderr] 73 |     federation_manager: Arc<federation::FederationManager>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `LegionManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/legion/mod.rs:95:18
[INFO] [stderr]     |
[INFO] [stderr]  76 | impl LegionManager {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  95 |     pub async fn server_identity(&self) -> Identity {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 100 |     pub async fn supports_legion(&self, client_id: &str) -> bool {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub async fn create_session(&self, client_id: String, capabilities: Vec<Capability>) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub async fn remove_session(&self, client_id: &str) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 122 |     pub async fn create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 160 |     pub async fn join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 200 |     pub async fn leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     pub async fn send_message(
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 246 |     pub async fn receive_message(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 277 |     pub async fn channel_stats(&self, channel_name: &str) -> LegionResult<phalanx_crypto::group::GroupStats> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 285 |     pub async fn list_channels(&self) -> Vec<String> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 290 |     pub async fn rotate_channel_keys(&self, channel_name: String, admin_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 312 |     pub async fn cleanup(&self) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `ChannelOperation` is never used
[INFO] [stderr]   --> src/legion/channels.rs:13:10
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub enum ChannelOperation {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelEvent` is never constructed
[INFO] [stderr]   --> src/legion/channels.rs:29:12
[INFO] [stderr]    |
[INFO] [stderr] 29 | pub struct ChannelEvent {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/legion/channels.rs:60:18
[INFO] [stderr]     |
[INFO] [stderr]  39 | impl LegionManager {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  60 |     pub async fn handle_create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  88 |     pub async fn handle_join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 114 |     pub async fn handle_leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 135 |     pub async fn handle_send_message(&self, channel_name: String, sender_id: String, message: String) -> LegionResult<Vec<u8>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 164 |     pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec<u8>) -> LegionResult<Strin...
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 175 |     pub async fn handle_key_rotation(&self, channel_name: String, admin_id: String) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 201 |     pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult<ChannelInfo> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 231 |     pub async fn list_user_channels(&self, user_id: &str) -> LegionResult<Vec<ChannelSummary>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 252 |     async fn log_channel_event(&self, event: ChannelEvent) -> LegionResult<()> {
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelInfo` is never constructed
[INFO] [stderr]    --> src/legion/channels.rs:261:12
[INFO] [stderr]     |
[INFO] [stderr] 261 | pub struct ChannelInfo {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelSummary` is never constructed
[INFO] [stderr]    --> src/legion/channels.rs:271:12
[INFO] [stderr]     |
[INFO] [stderr] 271 | pub struct ChannelSummary {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAX_OLD_KEYS` is never used
[INFO] [stderr]   --> src/legion/keys.rs:18:7
[INFO] [stderr]    |
[INFO] [stderr] 18 | const MAX_OLD_KEYS: usize = 10;
[INFO] [stderr]    |       ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `kdf_context` and `backup_handler` are never read
[INFO] [stderr]   --> src/legion/keys.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 22 | pub struct KeyManager {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 28 |     kdf_context: Vec<u8>,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 29 |     /// Backup storage handler
[INFO] [stderr] 30 |     backup_handler: Option<Box<dyn BackupHandler>>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `KeyManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `current_rotation`, `old_rotations`, `created_at`, `last_rotation`, and `next_rotation` are never read
[INFO] [stderr]   --> src/legion/keys.rs:37:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | struct ChannelKeys {
[INFO] [stderr]    |        ----------- fields in this struct
[INFO] [stderr] 36 |     /// Current active key rotation info
[INFO] [stderr] 37 |     current_rotation: KeyRotationInfo,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 38 |     /// Previous keys for backward compatibility
[INFO] [stderr] 39 |     old_rotations: Vec<KeyRotationInfo>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 40 |     /// Channel creation timestamp
[INFO] [stderr] 41 |     created_at: SystemTime,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 42 |     /// Last rotation timestamp  
[INFO] [stderr] 43 |     last_rotation: SystemTime,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 44 |     /// Next scheduled rotation
[INFO] [stderr] 45 |     next_rotation: SystemTime,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ChannelKeys` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `store_backup`, `retrieve_backup`, `list_backups`, and `cleanup_backups` are never used
[INFO] [stderr]    --> src/legion/keys.rs:106:14
[INFO] [stderr]     |
[INFO] [stderr] 104 | pub trait BackupHandler: Send + Sync + std::fmt::Debug {
[INFO] [stderr]     |           ------------- methods in this trait
[INFO] [stderr] 105 |     /// Store a key rotation backup
[INFO] [stderr] 106 |     async fn store_backup(&self, channel: &str, rotation: &KeyRotationInfo) -> LegionResult<()>;
[INFO] [stdout] 
[INFO] [stderr]     |              ^^^^^^^^^^^^
[INFO] [stdout] running 80 tests
[INFO] [stderr] ...
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_nonexistent_channel ... ok
[INFO] [stderr] 109 |     async fn retrieve_backup(&self, channel: &str, sequence: u64) -> LegionResult<Option<KeyRotationInfo>>;
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_not_operator ... ok
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_not_in_channel ... ok
[INFO] [stderr] ...
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_insufficient_params ... ok
[INFO] [stderr] 112 |     async fn list_backups(&self, channel: &str) -> LegionResult<Vec<u64>>;
[INFO] [stderr]     |              ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_success ... ok
[INFO] [stderr] 115 |     async fn cleanup_backups(&self, channel: &str, keep_count: usize) -> LegionResult<()>;
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/legion/keys.rs:146:18
[INFO] [stderr]     |
[INFO] [stderr] 130 | impl KeyManager {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 146 |     pub async fn set_backup_handler(&mut self, handler: Box<dyn BackupHandler>) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 166 |     pub async fn store_key_rotation(&self, channel: &str, rotation_msg: &KeyRotationMessage) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 215 |     pub async fn get_current_rotation(&self, channel: &str) -> LegionResult<Option<KeyRotationInfo>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 221 |     pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult<Option<KeyRotationInfo>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 247 |     pub async fn needs_rotation(&self, channel: &str) -> bool {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 275 |     pub async fn schedule_rotation(&self, channel: &str, when: SystemTime) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 288 |     pub async fn on_member_change(&self, channel: &str) -> LegionResult<bool> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 302 |     pub async fn channel_stats(&self, channel: &str) -> LegionResult<ChannelKeyStats> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 332 |     pub async fn cleanup(&self) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 365 |     fn compute_key_fingerprint(&self, rotation_msg: &KeyRotationMessage) -> [u8; 32] {
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_target_not_in_channel ... ok
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::list::tests::test_list_all_channels ... ok
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelKeyStats` is never constructed
[INFO] [stderr]    --> src/legion/keys.rs:382:12
[INFO] [stderr]     |
[INFO] [stderr] 382 | pub struct ChannelKeyStats {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `to_json` is never used
[INFO] [stderr]    --> src/legion/keys.rs:395:12
[INFO] [stderr]     |
[INFO] [stderr] 393 | impl ChannelKeyStats {
[INFO] [stderr]     | -------------------- method in this implementation
[INFO] [stderr] 394 |     /// Convert to JSON-friendly format
[INFO] [stderr] 395 |     pub fn to_json(&self) -> serde_json::Value {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MEMBER_INACTIVITY_TIMEOUT` is never used
[INFO] [stderr]   --> src/legion/members.rs:16:7
[INFO] [stderr]    |
[INFO] [stdout] test commands::handlers::list::tests::test_list_all_excludes_hidden_channels ... ok
[INFO] [stderr] 16 | const MEMBER_INACTIVITY_TIMEOUT: Duration = Duration::from_secs(7 * 24 * 60 * 60);
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_removes_target_from_channel ... ok
[INFO] [stderr] warning: field `invitations` is never read
[INFO] [stdout] test commands::handlers::kick::tests::test_kick_without_reason ... ok
[INFO] [stderr]   --> src/legion/members.rs:28:5
[INFO] [stdout] test commands::handlers::list::tests::test_list_empty_channel ... ok
[INFO] [stderr]    |
[INFO] [stdout] test commands::handlers::list::tests::test_list_invalid_connection ... ok
[INFO] [stderr] 20 | pub struct MemberManager {
[INFO] [stdout] test commands::handlers::list::tests::test_list_multiple_channels ... ok
[INFO] [stderr]    |            ------------- field in this struct
[INFO] [stdout] test commands::handlers::list::tests::test_list_mixed_channel_visibility ... ok
[INFO] [stderr] ...
[INFO] [stderr] 28 |     invitations: RwLock<HashMap<String, Vec<Invitation>>>,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `MemberManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `channel_name`, `owner`, `created_at`, `settings`, and `pending_invitations` are never read
[INFO] [stderr]   --> src/legion/members.rs:35:5
[INFO] [stderr]    |
[INFO] [stderr] 33 | struct ChannelMembership {
[INFO] [stderr]    |        ----------------- fields in this struct
[INFO] [stderr] 34 |     /// Channel name
[INFO] [stderr] 35 |     channel_name: String,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 36 |     /// Channel owner
[INFO] [stderr] 37 |     owner: String,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     created_at: SystemTime,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 42 |     /// Channel settings
[INFO] [stderr] 43 |     settings: ChannelSettings,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 44 |     /// Active invitations for this channel
[INFO] [stderr] 45 |     pending_invitations: HashSet<String>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ChannelMembership` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `member_id`, `identity`, `registered_at`, `last_seen`, and `metadata` are never read
[INFO] [stderr]   --> src/legion/members.rs:69:5
[INFO] [stderr]    |
[INFO] [stderr] 67 | struct MemberInfo {
[INFO] [stderr]    |        ---------- fields in this struct
[INFO] [stderr] 68 |     /// Member ID
[INFO] [stderr] 69 |     member_id: String,
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr] 70 |     /// Member's current identity
[INFO] [stderr] 71 |     identity: phalanx_crypto::Identity,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 75 |     registered_at: SystemTime,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 76 |     /// Last global activity
[INFO] [stderr] 77 |     last_seen: SystemTime,
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr] 78 |     /// Member metadata
[INFO] [stderr] 79 |     metadata: HashMap<String, String>,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `MemberInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/legion/members.rs:338:18
[INFO] [stderr]     |
[INFO] [stderr] 262 | impl MemberManager {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 338 |     pub async fn add_channel_member(&self, channel_name: &str, member_id: &str, role: MemberRole) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 380 |     pub async fn remove_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 407 |     pub async fn can_join_channel(&self, channel_name: &str, member_id: &str) -> LegionResult<bool> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 502 |     pub async fn create_invitation(&self, channel_name: String, inviter_id: String, invitee_id: String, expires_in: Duration) -> LegionRe...
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 531 |     pub async fn use_invitation(&self, invitation_id: &str) -> LegionResult<(String, String)> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 567 |     pub async fn channel_stats(&self, channel_name: &str) -> LegionResult<ChannelStats> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 596 |     pub async fn cleanup(&self) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 616 |     pub async fn get_user_channels(&self, user_id: &str) -> LegionResult<Vec<String>> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelStats` is never constructed
[INFO] [stderr]    --> src/legion/members.rs:628:12
[INFO] [stderr]     |
[INFO] [stderr] 628 | pub struct ChannelStats {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `identity` and `created_at` are never read
[INFO] [stderr]   --> src/legion/session.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct LegionSession {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 22 |     identity: RwLock<Identity>,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 28 |     created_at: SystemTime,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `LegionSession` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/legion/session.rs:101:18
[INFO] [stderr]     |
[INFO] [stderr]  37 | impl LegionSession {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub async fn identity(&self) -> LegionResult<Identity> {
[INFO] [stderr]     |                  ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 106 |     pub async fn public_key(&self) -> LegionResult<PublicKey> {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 127 |     pub fn age(&self) -> Duration {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 176 |     pub fn capabilities(&self) -> &HashSet<Capability> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 186 |     pub async fn stats(&self) -> SessionStats {
[INFO] [stderr]     |                  ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 204 |     pub async fn create_handshake(&self, group_id: [u8; 32]) -> LegionResult<phalanx_crypto::protocol::HandshakeMessage> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 223 |     pub async fn process_handshake(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SessionStats` is never constructed
[INFO] [stderr]    --> src/legion/session.rs:234:12
[INFO] [stderr]     |
[INFO] [stderr] 234 | pub struct SessionStats {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `to_json` is never used
[INFO] [stderr]    --> src/legion/session.rs:247:12
[INFO] [stderr]     |
[INFO] [stderr] 245 | impl SessionStats {
[INFO] [stderr]     | ----------------- method in this implementation
[INFO] [stderr] 246 |     /// Convert to JSON-friendly format
[INFO] [stderr] 247 |     pub fn to_json(&self) -> serde_json::Value {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `bridge_configs` is never read
[INFO] [stderr]   --> src/legion/federation.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub struct FederationManager {
[INFO] [stderr]    |            ----------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 18 |     bridge_configs: RwLock<HashMap<String, BridgeConfig>>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FederationManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `public_key` is never read
[INFO] [stderr]   --> src/legion/federation.rs:29:5
[INFO] [stdout] test commands::handlers::list::tests::test_list_channel_with_no_topic ... ok
[INFO] [stderr]    |
[INFO] [stdout] test commands::handlers::list::tests::test_list_private_channel_as_member ... ok
[INFO] [stderr] 25 | struct FederatedServer {
[INFO] [stdout] test commands::handlers::list::tests::test_list_private_channel_not_member ... ok
[INFO] [stderr]    |        --------------- field in this struct
[INFO] [stdout] test commands::handlers::list::tests::test_list_requester_without_nickname ... ok
[INFO] [stderr] ...
[INFO] [stdout] test commands::handlers::list::tests::test_list_secret_channel_as_member ... ok
[INFO] [stderr] 29 |     public_key: PublicKey,
[INFO] [stdout] test commands::handlers::list::tests::test_list_nonexistent_channel ... ok
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stdout] test commands::handlers::list::tests::test_list_secret_channel_not_member ... ok
[INFO] [stderr]    |
[INFO] [stdout] test commands::handlers::list::tests::test_list_specific_channel ... ok
[INFO] [stderr]    = note: `FederatedServer` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_no_target ... ok
[INFO] [stderr] 
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_op_to_non_member ... ok
[INFO] [stderr] warning: variants `Connected`, `Disconnected`, and `Error` are never constructed
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_non_operator_denied ... ok
[INFO] [stderr]   --> src/legion/federation.rs:43:5
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_query_channel ... ok
[INFO] [stderr]    |
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_remove_key ... ok
[INFO] [stderr] 42 | enum FederationStatus {
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_non_member_denied ... ok
[INFO] [stderr]    |      ---------------- variants in this enum
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_voice ... ok
[INFO] [stderr] 43 |     Connected,
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_remove_limit ... ok
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_remove_operator ... ok
[INFO] [stderr] 44 |     Connecting,
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_channel_key ... ok
[INFO] [stderr] 45 |     Disconnected,
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_operator ... ok
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_user_mode_not_implemented ... ok
[INFO] [stderr] 46 |     Error(String),
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_need_more_params ... ok
[INFO] [stderr]    |     ^^^^^
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_clear ... ok
[INFO] [stderr]    |
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_channel_limit ... ok
[INFO] [stderr]    = note: `FederationStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_get_existing ... ok
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/legion/federation.rs:227:18
[INFO] [stderr]     |
[INFO] [stderr] 159 | impl FederationManager {
[INFO] [stderr]     | ---------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 227 |     pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 267 |     pub async fn configure_bridge(&self, config: BridgeConfig) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 287 |     pub async fn remove_bridge(&self, bridge_name: &str) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 298 |     pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec<u8>) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 319 |     pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec<u8>) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 336 |     pub async fn federation_stats(&self) -> FederationStats {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 360 |     pub async fn cleanup(&self) -> LegionResult<()> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FederationStats` is never constructed
[INFO] [stderr]    --> src/legion/federation.rs:396:12
[INFO] [stderr]     |
[INFO] [stderr] 396 | pub struct FederationStats {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `scheduled_operations` is never read
[INFO] [stderr]   --> src/legion/channel_manager.rs:27:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct AdvancedChannelManager {
[INFO] [stderr]    |            ---------------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 27 |     scheduled_operations: RwLock<Vec<ScheduledOperation>>,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `stats` and `rate_limits` are never read
[INFO] [stderr]   --> src/legion/channel_manager.rs:42:5
[INFO] [stderr]    |
[INFO] [stderr] 32 | struct ManagedChannel {
[INFO] [stderr]    |        -------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 42 |     stats: ChannelStats,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 46 |     rate_limits: HashMap<String, RateState>,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ManagedChannel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `message_count`, `window_start`, and `burst_remaining` are never read
[INFO] [stderr]    --> src/legion/channel_manager.rs:115:5
[INFO] [stderr]     |
[INFO] [stderr] 113 | struct RateState {
[INFO] [stderr]     |        --------- fields in this struct
[INFO] [stderr] 114 |     /// Message count in current window
[INFO] [stderr] 115 |     message_count: u32,
[INFO] [stderr]     |     ^^^^^^^^^^^^^
[INFO] [stderr] 116 |     /// Current window start time
[INFO] [stderr] 117 |     window_start: SystemTime,
[INFO] [stderr]     |     ^^^^^^^^^^^^
[INFO] [stderr] 118 |     /// Burst allowance remaining
[INFO] [stderr] 119 |     burst_remaining: u32,
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `RateState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ExtendedChannelInfo` is never constructed
[INFO] [stderr]    --> src/legion/channel_manager.rs:160:12
[INFO] [stderr]     |
[INFO] [stderr] 160 | pub struct ExtendedChannelInfo {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelHealth` is never constructed
[INFO] [stderr]    --> src/legion/channel_manager.rs:175:12
[INFO] [stderr]     |
[INFO] [stderr] 175 | pub struct ChannelHealth {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `HealthIssue` is never used
[INFO] [stderr]    --> src/legion/channel_manager.rs:186:10
[INFO] [stderr]     |
[INFO] [stderr] 186 | pub enum HealthIssue {
[INFO] [stderr]     |          ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PerformanceMetrics` is never constructed
[INFO] [stderr]    --> src/legion/channel_manager.rs:201:12
[INFO] [stderr]     |
[INFO] [stderr] 201 | pub struct PerformanceMetrics {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SecurityStatus` is never constructed
[INFO] [stderr]    --> src/legion/channel_manager.rs:214:12
[INFO] [stderr]     |
[INFO] [stderr] 214 | pub struct SecurityStatus {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `SecurityEvent` is never used
[INFO] [stderr]    --> src/legion/channel_manager.rs:227:10
[INFO] [stderr]     |
[INFO] [stderr] 227 | pub enum SecurityEvent {
[INFO] [stderr]     |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_extended_channel_info`, `calculate_channel_health`, `assess_security_status`, and `process_scheduled_operations` are never used
[INFO] [stderr]    --> src/legion/channel_manager.rs:808:18
[INFO] [stderr]     |
[INFO] [stderr] 252 | impl AdvancedChannelManager {
[INFO] [stderr]     | --------------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 808 |     pub async fn get_extended_channel_info(&self, channel_name: &str) -> LegionResult<ExtendedChannelInfo> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 833 |     async fn calculate_channel_health(&self, channel: &ManagedChannel) -> ChannelHealth {
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 873 |     async fn assess_security_status(&self, channel: &ManagedChannel) -> SecurityStatus {
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 973 |     pub async fn process_scheduled_operations(&self) -> LegionResult<usize> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `ProtocolError` is never used
[INFO] [stderr]   --> src/protocol/mod.rs:36:10
[INFO] [stderr]    |
[INFO] [stderr] 36 | pub type ProtocolError = IronError;
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple variants are never constructed
[INFO] [stderr]   --> src/protocol/commands.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr]  4 | pub enum Command {
[INFO] [stderr]    |          ------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 16 |     Topic { channel: String, topic: Option<String> },
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 17 |     Names(Vec<String>),
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 18 |     List(Option<Vec<String>>),
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 25 |     Who(Option<String>),
[INFO] [stderr]    |     ^^^
[INFO] [stderr] 26 |     Whois(Vec<String>),
[INFO] [stderr] 27 |     Whowas(String, Option<i32>),
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 31 |     Kick { channel: String, user: String, reason: Option<String> },
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 32 |     Mode { target: String, modes: Option<String>, params: Vec<String> },
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 33 |     Invite { nick: String, channel: String },
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 36 |     Motd(Option<String>),
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 37 |     Version(Option<String>),
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 38 |     Stats(Option<String>, Option<String>),
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 39 |     Time(Option<String>),
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 40 |     Info(Option<String>),
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     Account(String),
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 46 |     Monitor { subcommand: String, targets: Vec<String> },
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 47 |     Metadata { target: String, subcommand: String, params: Vec<String> },
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 48 |     TagMsg { target: String },
[INFO] [stderr] 49 |     Batch { reference: String, batch_type: Option<String>, params: Vec<String> },
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 58 |     Oper { name: String, password: String },
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 59 |     Kill { nick: String, reason: String },
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 60 |     Rehash,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 61 |     Restart,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 62 |     Die,
[INFO] [stderr]    |     ^^^
[INFO] [stderr] ...
[INFO] [stderr] 65 |     CtcpRequest { target: String, command: String, params: String },
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 66 |     CtcpResponse { target: String, command: String, params: String },
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MessageExtensions` is never constructed
[INFO] [stderr]  --> src/protocol/extensions.rs:5:12
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct MessageExtensions {
[INFO] [stderr]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `TypingState` is never used
[INFO] [stderr]   --> src/protocol/extensions.rs:18:10
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub enum TypingState {
[INFO] [stderr]    |          ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `from_tags`, and `to_tags` are never used
[INFO] [stderr]   --> src/protocol/extensions.rs:25:12
[INFO] [stderr]    |
[INFO] [stderr] 24 | impl MessageExtensions {
[INFO] [stderr]    | ---------------------- associated items in this implementation
[INFO] [stderr] 25 |     pub fn new() -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 39 |     pub fn from_tags(tags: &HashMap<String, Option<String>>) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 74 |     pub fn to_tags(&self) -> HashMap<String, Option<String>> {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Batch` is never constructed
[INFO] [stderr]    --> src/protocol/extensions.rs:127:12
[INFO] [stderr]     |
[INFO] [stderr] 127 | pub struct Batch {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `add_message` are never used
[INFO] [stderr]    --> src/protocol/extensions.rs:136:12
[INFO] [stderr]     |
[INFO] [stderr] 135 | impl Batch {
[INFO] [stderr]     | ---------- associated items in this implementation
[INFO] [stderr] 136 |     pub fn new(reference: String, batch_type: String, params: Vec<String>) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 146 |     pub fn add_message(&mut self, msg: crate::protocol::Message) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `SecurityError` is never used
[INFO] [stderr]   --> src/security/mod.rs:18:10
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub enum SecurityError {
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `quota` is never read
[INFO] [stderr]   --> src/security/mod.rs:39:5
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub struct RateLimiter {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] 39 |     quota: Quota,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `check_key` is never used
[INFO] [stderr]   --> src/security/mod.rs:59:18
[INFO] [stderr]    |
[INFO] [stderr] 43 | impl RateLimiter {
[INFO] [stderr]    | ---------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 59 |     pub async fn check_key(&self, _key: &str) -> bool {
[INFO] [stderr]    |                  ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ConnectionLimiter` is never constructed
[INFO] [stderr]   --> src/security/mod.rs:64:12
[INFO] [stderr]    |
[INFO] [stderr] 64 | pub struct ConnectionLimiter {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ConnectionLimits` is never constructed
[INFO] [stderr]   --> src/security/mod.rs:68:8
[INFO] [stderr]    |
[INFO] [stderr] 68 | struct ConnectionLimits {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `check_and_add`, and `remove` are never used
[INFO] [stderr]    --> src/security/mod.rs:76:12
[INFO] [stderr]     |
[INFO] [stderr]  75 | impl ConnectionLimiter {
[INFO] [stderr]     | ---------------------- associated items in this implementation
[INFO] [stderr]  76 |     pub fn new(max_per_ip: usize, max_global: usize) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  87 |     pub fn check_and_add(&self, addr: SocketAddr) -> Result<(), SecurityError> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 |     pub fn remove(&self, addr: SocketAddr) {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `FloodProtection` is never constructed
[INFO] [stderr]    --> src/security/mod.rs:123:12
[INFO] [stderr]     |
[INFO] [stderr] 123 | pub struct FloodProtection {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `check_flood`, and `clear` are never used
[INFO] [stderr]    --> src/security/mod.rs:130:12
[INFO] [stderr]     |
[INFO] [stderr] 129 | impl FloodProtection {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr] 130 |     pub fn new(max_messages: usize, time_window: Duration) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 138 |     pub fn check_flood(&self, connection_id: u64) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 155 |     pub fn clear(&self, connection_id: u64) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `BanManager` is never constructed
[INFO] [stderr]    --> src/security/mod.rs:160:12
[INFO] [stderr]     |
[INFO] [stderr] 160 | pub struct BanManager {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `BanEntry` is never constructed
[INFO] [stderr]    --> src/security/mod.rs:165:12
[INFO] [stderr]     |
[INFO] [stderr] 165 | pub struct BanEntry {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `add_ban`, `remove_ban`, `is_banned`, and `get_bans` are never used
[INFO] [stderr]    --> src/security/mod.rs:173:12
[INFO] [stderr]     |
[INFO] [stderr] 172 | impl BanManager {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr] 173 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 179 |     pub fn add_ban(&self, channel: &str, ban: BanEntry) {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 186 |     pub fn remove_ban(&self, channel: &str, mask: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 196 |     pub fn is_banned(&self, channel: &str, user_mask: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 214 |     pub fn get_bans(&self, channel: &str) -> Vec<BanEntry> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `mask_matches` is never used
[INFO] [stderr]    --> src/security/mod.rs:222:4
[INFO] [stderr]     |
[INFO] [stderr] 222 | fn mask_matches(pattern: &str, text: &str) -> bool {
[INFO] [stderr]     |    ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `AuthError` is never used
[INFO] [stderr]   --> src/security/auth.rs:10:10
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub enum AuthError {
[INFO] [stderr]    |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `SaslMechanism` is never used
[INFO] [stderr]   --> src/security/auth.rs:25:10
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub enum SaslMechanism {
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `from_str` and `as_str` are never used
[INFO] [stderr]   --> src/security/auth.rs:32:12
[INFO] [stderr]    |
[INFO] [stderr] 31 | impl SaslMechanism {
[INFO] [stderr]    | ------------------ associated items in this implementation
[INFO] [stderr] 32 |     pub fn from_str(s: &str) -> Option<Self> {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn as_str(&self) -> &'static str {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `AuthMethod` is never used
[INFO] [stderr]   --> src/security/auth.rs:51:10
[INFO] [stderr]    |
[INFO] [stderr] 51 | pub enum AuthMethod {
[INFO] [stderr]    |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `LocalPasswordHasher` is never constructed
[INFO] [stderr]   --> src/security/auth.rs:62:12
[INFO] [stderr]    |
[INFO] [stderr] 62 | pub struct LocalPasswordHasher;
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `hash_password` and `verify_password` are never used
[INFO] [stderr]   --> src/security/auth.rs:65:12
[INFO] [stderr]    |
[INFO] [stderr] 64 | impl LocalPasswordHasher {
[INFO] [stderr]    | ------------------------ associated functions in this implementation
[INFO] [stderr] 65 |     pub fn hash_password(password: &str) -> Result<String, AuthError> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 70 |     pub fn verify_password(password: &str, hash: &str) -> Result<bool, AuthError> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SaslAuthenticator` is never constructed
[INFO] [stderr]   --> src/security/auth.rs:76:12
[INFO] [stderr]    |
[INFO] [stderr] 76 | pub struct SaslAuthenticator {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ScramServerState` is never constructed
[INFO] [stderr]   --> src/security/auth.rs:80:8
[INFO] [stderr]    |
[INFO] [stderr] 80 | struct ScramServerState {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `authenticate_plain`, `start_scram_sha256`, and `verify_scram_sha256` are never used
[INFO] [stderr]    --> src/security/auth.rs:89:12
[INFO] [stderr]     |
[INFO] [stderr]  88 | impl SaslAuthenticator {
[INFO] [stderr]     | ---------------------- associated items in this implementation
[INFO] [stderr]  89 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  95 |     pub fn authenticate_plain(&self, auth_data: &[u8]) -> Result<(String, String), AuthError> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 115 |     pub fn start_scram_sha256(&mut self, client_first: &str) -> Result<String, AuthError> {
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_op_to_unknown_nick ... ok
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_nonexistent_channel ... ok
[INFO] [stderr] ...
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_not_in_channel ... ok
[INFO] [stderr] 152 |     pub fn verify_scram_sha256(
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_get_no_topic ... ok
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_operator_restricted_mode ... ok
[INFO] [stderr] 
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_unknown_channel ... ok
[INFO] [stderr] warning: function `authenticate` is never used
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_no_params ... ok
[INFO] [stderr]    --> src/security/auth.rs:193:14
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_set_success ... ok
[INFO] [stderr]     |
[INFO] [stdout] test commands::handlers::who::tests::test_who_case_insensitive_nick ... ok
[INFO] [stderr] 193 | pub async fn authenticate(
[INFO] [stdout] test commands::handlers::topic::tests::test_topic_restricted_mode ... ok
[INFO] [stderr]     |              ^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::who::tests::test_who_channel_variations ... ok
[INFO] [stderr] 
[INFO] [stdout] test commands::handlers::who::tests::test_who_no_params ... ok
[INFO] [stderr] warning: function `generate_nonce` is never used
[INFO] [stdout] test commands::handlers::who::tests::test_who_private_channel_not_member ... ok
[INFO] [stderr]    --> src/security/auth.rs:218:4
[INFO] [stdout] test commands::handlers::who::tests::test_who_requester_without_nickname ... ok
[INFO] [stderr]     |
[INFO] [stdout] test commands::handlers::who::tests::test_who_invalid_connection ... ok
[INFO] [stderr] 218 | fn generate_nonce() -> String {
[INFO] [stdout] test commands::handlers::who::tests::test_who_secret_channel_not_member ... ok
[INFO] [stderr]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::who::tests::test_who_specific_user_exists ... ok
[INFO] [stderr] 
[INFO] [stdout] test commands::handlers::who::tests::test_who_specific_user_not_exists ... ok
[INFO] [stderr] warning: function `generate_salt` is never used
[INFO] [stdout] test commands::handlers::who::tests::test_who_wildcard ... ok
[INFO] [stderr]    --> src/security/auth.rs:225:4
[INFO] [stdout] test commands::standard_replies::tests::test_common_replies ... ok
[INFO] [stderr]     |
[INFO] [stdout] test commands::standard_replies::tests::test_standard_reply_creation ... ok
[INFO] [stderr] 225 | fn generate_salt() -> Vec<u8> {
[INFO] [stdout] test legion::channels::tests::test_channel_name_validation ... ok
[INFO] [stderr]     |    ^^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::who::tests::test_who_channel_member ... ok
[INFO] [stderr] 
[INFO] [stdout] test commands::handlers::who::tests::test_who_channel_not_member ... ok
[INFO] [stderr] warning: function `derive_salted_password` is never used
[INFO] [stdout] test legion::keys::tests::test_key_manager_creation ... ok
[INFO] [stderr]    --> src/security/auth.rs:231:4
[INFO] [stdout] test legion::keys::tests::test_rotation_policy ... ok
[INFO] [stderr]     |
[INFO] [stdout] test legion::federation::tests::test_federated_server_management ... ok
[INFO] [stderr] 231 | fn derive_salted_password(password: &[u8], salt: &[u8], iterations: u32) -> Vec<u8> {
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_multiple_modes ... ok
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_topic_protection ... ok
[INFO] [stderr] 
[INFO] [stdout] test legion::members::tests::test_channel_creation_and_membership ... ok
[INFO] [stderr] warning: function `hmac_sha256` is never used
[INFO] [stdout] test legion::session::tests::test_channel_management ... ok
[INFO] [stderr]    --> src/security/auth.rs:237:4
[INFO] [stdout] test legion::members::tests::test_permissions ... ok
[INFO] [stderr]     |
[INFO] [stdout] test legion::session::tests::test_session_creation ... ok
[INFO] [stderr] 237 | fn hmac_sha256(key: &[u8], data: &[u8]) -> Vec<u8> {
[INFO] [stdout] test security::validation::tests::test_validate_message ... ok
[INFO] [stderr]     |    ^^^^^^^^^^^
[INFO] [stdout] test legion::federation::tests::test_federation_enable_disable ... ok
[INFO] [stderr] 
[INFO] [stdout] test legion::federation::tests::test_federation_manager_creation ... ok
[INFO] [stderr] warning: function `create_tls_acceptor` is never used
[INFO] [stdout] test security::validation::tests::test_validate_nickname ... ok
[INFO] [stderr]  --> src/security/tls.rs:4:14
[INFO] [stdout] test security::validation::tests::test_validate_channel_name ... ok
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub async fn create_tls_acceptor(_cert_path: &Path, _key_path: &Path) -> io::Result<()> {
[INFO] [stderr]   |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `VALID_USER_REGEX` is never used
[INFO] [stderr]   --> src/security/validation.rs:12:8
[INFO] [stderr]    |
[INFO] [stderr] 12 | static VALID_USER_REGEX: Lazy<Regex> = Lazy::new(|| {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_username` is never used
[INFO] [stderr]   --> src/security/validation.rs:32:8
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub fn validate_username(username: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_realname` is never used
[INFO] [stderr]   --> src/security/validation.rs:40:8
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub fn validate_realname(realname: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_topic` is never used
[INFO] [stderr]   --> src/security/validation.rs:58:8
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub fn validate_topic(topic: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_away_message` is never used
[INFO] [stderr]   --> src/security/validation.rs:67:8
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub fn validate_away_message(message: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_kick_reason` is never used
[INFO] [stderr]   --> src/security/validation.rs:76:8
[INFO] [stderr]    |
[INFO] [stderr] 76 | pub fn validate_kick_reason(reason: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_quit_message` is never used
[INFO] [stderr]   --> src/security/validation.rs:85:8
[INFO] [stderr]    |
[INFO] [stderr] 85 | pub fn validate_quit_message(message: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_channel_key` is never used
[INFO] [stderr]   --> src/security/validation.rs:94:8
[INFO] [stderr]    |
[INFO] [stderr] 94 | pub fn validate_channel_key(key: &str) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `sanitize_message` is never used
[INFO] [stderr]    --> src/security/validation.rs:103:8
[INFO] [stderr]     |
[INFO] [stderr] 103 | pub fn sanitize_message(message: &str) -> String {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_valid_host_mask` is never used
[INFO] [stderr]    --> src/security/validation.rs:111:8
[INFO] [stderr]     |
[INFO] [stderr] 111 | pub fn is_valid_host_mask(mask: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `has_legion` and `legion` are never used
[INFO] [stderr]   --> src/state/mod.rs:52:12
[INFO] [stderr]    |
[INFO] [stderr] 23 | impl ServerState {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 52 |     pub fn has_legion(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 57 |     pub fn legion(&self) -> Option<&LegionManager> {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `connection_id` and `joined_at` are never read
[INFO] [stderr]  --> src/state/channel.rs:6:9
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct ChannelMember {
[INFO] [stderr]   |            ------------- fields in this struct
[INFO] [stderr] 6 |     pub connection_id: u64,
[INFO] [stderr]   |         ^^^^^^^^^^^^^
[INFO] [stderr] 7 |     pub modes: Vec<char>,
[INFO] [stderr] 8 |     pub joined_at: DateTime<Utc>,
[INFO] [stderr]   |         ^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `ChannelMember` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `name` and `created_at` are never read
[INFO] [stderr]   --> src/state/channel.rs:13:9
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct Channel {
[INFO] [stderr]    |            ------- fields in this struct
[INFO] [stderr] 13 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 19 |     pub created_at: DateTime<Utc>,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Channel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `id`, `addr`, and `created_at` are never read
[INFO] [stderr]   --> src/state/connection.rs:9:9
[INFO] [stderr]    |
[INFO] [stderr]  8 | pub struct Connection {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr]  9 |     pub id: u64,
[INFO] [stderr]    |         ^^
[INFO] [stderr] 10 |     pub addr: SocketAddr,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 17 |     pub created_at: DateTime<Utc>,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Connection` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: function `mask_ip` is never used
[INFO] [stderr]   --> src/utils/mod.rs:13:8
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub fn mask_ip(ip: IpAddr) -> String {
[INFO] [stderr]    |        ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_mode_string` is never used
[INFO] [stderr]   --> src/utils/mod.rs:34:8
[INFO] [stderr]    |
[INFO] [stderr] 34 | pub fn parse_mode_string(modes: &str) -> (Vec<char>, Vec<char>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `format_duration` is never used
[INFO] [stderr]   --> src/utils/mod.rs:56:8
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub fn format_duration(seconds: u64) -> String {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `normalize_channel_name` is never used
[INFO] [stderr]   --> src/utils/mod.rs:77:8
[INFO] [stderr]    |
[INFO] [stderr] 77 | pub fn normalize_channel_name(name: &str) -> String {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `normalize_nickname` is never used
[INFO] [stderr]   --> src/utils/mod.rs:81:8
[INFO] [stderr]    |
[INFO] [stderr] 81 | pub fn normalize_nickname(nick: &str) -> String {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `load_with_defaults` is never used
[INFO] [stderr]    --> src/utils/config.rs:157:12
[INFO] [stderr]     |
[INFO] [stderr] 148 | impl ServerConfig {
[INFO] [stderr]     | ----------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 157 |     pub fn load_with_defaults(path: Option<impl AsRef<Path>>) -> Result<Self, ConfigError> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `legion-server` (bin "legion-server" test) generated 245 warnings (run `cargo fix --bin "legion-server" --tests` to apply 67 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.56s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/legion_server-c4ba5471bae76a11)
[INFO] [stdout] test legion::members::tests::test_member_manager_creation ... ok
[INFO] [stdout] test legion::channel_manager::tests::test_channel_creation ... FAILED
[INFO] [stdout] test legion::channel_manager::tests::test_topic_setting ... FAILED
[INFO] [stdout] test legion::session::tests::test_legion_activation ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- legion::channel_manager::tests::test_channel_creation stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'legion::channel_manager::tests::test_channel_creation' (80) panicked at src/legion/channel_manager.rs:1024:17:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Channel("Channel not found: !test")
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x591e15eb3e12 - std::backtrace_rs::backtrace::libunwind::trace::hcab59e1e990fdc24
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x591e15eb3e12 - std::backtrace_rs::backtrace::trace_unsynchronized::he24cc57f3d2f47b7
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x591e15eb3e12 - std::sys::backtrace::_print_fmt::hf8d65ede198eeb54
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:66:9
[INFO] [stdout]    3:     0x591e15eb3e12 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h67edf0e4d33c343c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:39:26
[INFO] [stdout]    4:     0x591e15ec69ef - core::fmt::rt::Argument::fmt::hef94184842aeafdd
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/fmt/rt.rs:173:76
[INFO] [stdout]    5:     0x591e15ec69ef - core::fmt::write::hcf0c66b48a8fa606
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/fmt/mod.rs:1468:25
[INFO] [stdout]    6:     0x591e15e80b41 - std::io::default_write_fmt::h69967ac0ba93195f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x591e15e80b41 - std::io::Write::write_fmt::h8db9396209deaa1c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/io/mod.rs:1954:13
[INFO] [stdout]    8:     0x591e15e8cd62 - std::sys::backtrace::BacktraceLock::print::h07e5435aa717b414
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:42:9
[INFO] [stdout]    9:     0x591e15e91b8f - std::panicking::default_hook::{{closure}}::h91001850288db5f7
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:301:27
[INFO] [stdout]   10:     0x591e15e91a21 - std::panicking::default_hook::h2346dbb704ef5512
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:325:9
[INFO] [stdout]   11:     0x591e15a503be - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h18383b2e29377420
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1999:9
[INFO] [stdout]   12:     0x591e15a503be - test::test_main_with_exit_callback::{{closure}}::h272d7ef99aef06dc
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x591e15e922ff - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h6dba6e441651a0d1
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1999:9
[INFO] [stdout]   14:     0x591e15e922ff - std::panicking::panic_with_hook::hd2b063a6090d23a4
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:842:13
[INFO] [stdout]   15:     0x591e15e920aa - std::panicking::panic_handler::{{closure}}::he666d95f139a333e
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:707:13
[INFO] [stdout]   16:     0x591e15e8ce99 - std::sys::backtrace::__rust_end_short_backtrace::h631ad224854ebee5
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:174:18
[INFO] [stdout]   17:     0x591e15e74fbd - __rustc[1d67440d6e82e4f]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:698:5
[INFO] [stdout]   18:     0x591e15ecf8c0 - core::panicking::panic_fmt::h420ddb7fd73daf53
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panicking.rs:75:14
[INFO] [stdout]   19:     0x591e15ece866 - core::result::unwrap_failed::hdde076be853d034f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/result.rs:1855:5
[INFO] [stdout]   20:     0x591e159a6395 - core::result::Result<T,E>::unwrap::h76dc10cc73a4917f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/result.rs:1226:23
[INFO] [stdout]   21:     0x591e159a6395 - legion_server::legion::channel_manager::tests::test_channel_creation::{{closure}}::h0d1eb574f34aeb2d
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/channel_manager.rs:1024:17
[INFO] [stdout]   22:     0x591e15989792 - <core::pin::Pin<P> as core::future::future::Future>::poll::h932caa71268998e0
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/future/future.rs:133:9
[INFO] [stdout]   23:     0x591e159897cd - <core::pin::Pin<P> as core::future::future::Future>::poll::he73aa8a77bffe3e2
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/future/future.rs:133:9
[INFO] [stdout]   24:     0x591e1598796d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::h19c9598bbda952a6
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:742:70
[INFO] [stdout]   25:     0x591e159878ab - tokio::task::coop::with_budget::hc7e11569ef8e5186
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs:167:5
[INFO] [stdout]   26:     0x591e159878ab - tokio::task::coop::budget::h1e17267d73e7ade5
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs:133:5
[INFO] [stdout]   27:     0x591e159878ab - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::h88cc5309755f1be1
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:742:25
[INFO] [stdout]   28:     0x591e15984a60 - tokio::runtime::scheduler::current_thread::Context::enter::h03d4b8de5cbb1a54
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:432:19
[INFO] [stdout]   29:     0x591e15986ddd - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h8b3f933b3c69e852
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:741:44
[INFO] [stdout]   30:     0x591e15985ff4 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::h7a48bbd0a992a114
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:829:68
[INFO] [stdout]   31:     0x591e1596839b - tokio::runtime::context::scoped::Scoped<T>::set::h0272ef29e8df24cf
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   32:     0x591e15a269b9 - tokio::runtime::context::set_scheduler::{{closure}}::hc75ca718be458652
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs:176:38
[INFO] [stdout]   33:     0x591e1598e992 - std::thread::local::LocalKey<T>::try_with::h069ee2e5bcfdae3f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/local.rs:315:12
[INFO] [stdout]   34:     0x591e1598e67e - std::thread::local::LocalKey<T>::with::h4e63b5060df8b5c2
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/local.rs:279:20
[INFO] [stdout]   35:     0x591e15a268ed - tokio::runtime::context::set_scheduler::h5857b5e194543bca
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs:176:17
[INFO] [stdout]   36:     0x591e15985980 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h6204d185041c35cc
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:829:27
[INFO] [stdout]   37:     0x591e15986033 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::h8e4806a752fbde09
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:729:24
[INFO] [stdout]   38:     0x591e15984320 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::h7e067b43f6829791
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:200:33
[INFO] [stdout]   39:     0x591e159e2b20 - tokio::runtime::context::runtime::enter_runtime::h6decfc92deb32eb5
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   40:     0x591e15983d91 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::hb00b45033fbbe4ca
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:188:9
[INFO] [stdout]   41:     0x591e159e35f4 - tokio::runtime::runtime::Runtime::block_on_inner::hb14fbd43eb71f0e7
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs:356:52
[INFO] [stdout]   42:     0x591e159e37bc - tokio::runtime::runtime::Runtime::block_on::h15a171ecf37d4962
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs:330:18
[INFO] [stdout]   43:     0x591e159a5cfd - legion_server::legion::channel_manager::tests::test_channel_creation::h0a5afe4e6fac066e
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/channel_manager.rs:1026:32
[INFO] [stdout]   44:     0x591e159a64b7 - legion_server::legion::channel_manager::tests::test_channel_creation::{{closure}}::h27920fb991db382a
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/channel_manager.rs:1011:37
[INFO] [stdout]   45:     0x591e15956a46 - core::ops::function::FnOnce::call_once::hba1e2a5cab683ad7
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   46:     0x591e15a5017b - core::ops::function::FnOnce::call_once::h70887edf07a630ba
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   47:     0x591e15a5017b - test::__rust_begin_short_backtrace::h27763c4cbbdb8601
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:663:18
[INFO] [stdout]   48:     0x591e15a65de5 - test::run_test_in_process::{{closure}}::h4dc8bc6d5e3924d3
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:686:74
[INFO] [stdout]   49:     0x591e15a65de5 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h75905e8ffe81974f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   50:     0x591e15a65de5 - std::panicking::catch_unwind::do_call::h0bc60366ba66eba5
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:590:40
[INFO] [stdout]   51:     0x591e15a65de5 - std::panicking::catch_unwind::hae1ec7bf94407afa
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:553:19
[INFO] [stdout]   52:     0x591e15a65de5 - std::panic::catch_unwind::h0f4ff4773d84d3cd
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panic.rs:359:14
[INFO] [stdout]   53:     0x591e15a65de5 - test::run_test_in_process::h03fbc77ae48b3f10
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:686:27
[INFO] [stdout]   54:     0x591e15a65de5 - test::run_test::{{closure}}::h83476a9c453dc4d3
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:607:43
[INFO] [stdout]   55:     0x591e15a3c5d4 - test::run_test::{{closure}}::h515482ad1e7fe7de
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:637:41
[INFO] [stdout]   56:     0x591e15a3c5d4 - std::sys::backtrace::__rust_begin_short_backtrace::hed09f6ac5fe9d647
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:158:18
[INFO] [stdout]   57:     0x591e15a3fe9a - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h988e2cd969319888
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/mod.rs:559:17
[INFO] [stdout]   58:     0x591e15a3fe9a - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hd70e28dc46ec20be
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   59:     0x591e15a3fe9a - std::panicking::catch_unwind::do_call::hdc29e11311eb7655
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:590:40
[INFO] [stdout]   60:     0x591e15a3fe9a - std::panicking::catch_unwind::h9e402d6a96fef41c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:553:19
[INFO] [stdout]   61:     0x591e15a3fe9a - std::panic::catch_unwind::h9213c0c54aec70e0
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panic.rs:359:14
[INFO] [stdout]   62:     0x591e15a3fe9a - std::thread::Builder::spawn_unchecked_::{{closure}}::h6262965869ed2b87
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/mod.rs:557:30
[INFO] [stdout]   63:     0x591e15a3fe9a - core::ops::function::FnOnce::call_once{{vtable.shim}}::h05c05ed02619e462
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   64:     0x591e15e87fff - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h2044e71c41d3958a
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1985:9
[INFO] [stdout]   65:     0x591e15e87fff - std::sys::thread::unix::Thread::new::thread_start::hf277835320aa8e5a
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/thread/unix.rs:126:17
[INFO] [stdout]   66:     0x746fb9439aa4 - <unknown>
[INFO] [stdout]   67:     0x746fb94c6a34 - clone
[INFO] [stdout]   68:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- legion::channel_manager::tests::test_topic_setting stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'legion::channel_manager::tests::test_topic_setting' (81) panicked at src/legion/channel_manager.rs:1045:17:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Channel("Channel not found: !test")
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x591e15eb3e12 - std::backtrace_rs::backtrace::libunwind::trace::hcab59e1e990fdc24
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x591e15eb3e12 - std::backtrace_rs::backtrace::trace_unsynchronized::he24cc57f3d2f47b7
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x591e15eb3e12 - std::sys::backtrace::_print_fmt::hf8d65ede198eeb54
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:66:9
[INFO] [stdout]    3:     0x591e15eb3e12 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h67edf0e4d33c343c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:39:26
[INFO] [stdout]    4:     0x591e15ec69ef - core::fmt::rt::Argument::fmt::hef94184842aeafdd
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/fmt/rt.rs:173:76
[INFO] [stdout]    5:     0x591e15ec69ef - core::fmt::write::hcf0c66b48a8fa606
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/fmt/mod.rs:1468:25
[INFO] [stdout]    6:     0x591e15e80b41 - std::io::default_write_fmt::h69967ac0ba93195f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x591e15e80b41 - std::io::Write::write_fmt::h8db9396209deaa1c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/io/mod.rs:1954:13
[INFO] [stdout]    8:     0x591e15e8cd62 - std::sys::backtrace::BacktraceLock::print::h07e5435aa717b414
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:42:9
[INFO] [stdout]    9:     0x591e15e91b8f - std::panicking::default_hook::{{closure}}::h91001850288db5f7
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:301:27
[INFO] [stdout]   10:     0x591e15e91a21 - std::panicking::default_hook::h2346dbb704ef5512
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:325:9
[INFO] [stdout]   11:     0x591e15a503be - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h18383b2e29377420
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1999:9
[INFO] [stdout]   12:     0x591e15a503be - test::test_main_with_exit_callback::{{closure}}::h272d7ef99aef06dc
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x591e15e922ff - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h6dba6e441651a0d1
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1999:9
[INFO] [stdout]   14:     0x591e15e922ff - std::panicking::panic_with_hook::hd2b063a6090d23a4
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:842:13
[INFO] [stdout]   15:     0x591e15e920aa - std::panicking::panic_handler::{{closure}}::he666d95f139a333e
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:707:13
[INFO] [stdout]   16:     0x591e15e8ce99 - std::sys::backtrace::__rust_end_short_backtrace::h631ad224854ebee5
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:174:18
[INFO] [stdout]   17:     0x591e15e74fbd - __rustc[1d67440d6e82e4f]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:698:5
[INFO] [stdout]   18:     0x591e15ecf8c0 - core::panicking::panic_fmt::h420ddb7fd73daf53
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panicking.rs:75:14
[INFO] [stdout]   19:     0x591e15ece866 - core::result::unwrap_failed::hdde076be853d034f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/result.rs:1855:5
[INFO] [stdout]   20:     0x591e159a5719 - core::result::Result<T,E>::unwrap::h76dc10cc73a4917f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/result.rs:1226:23
[INFO] [stdout]   21:     0x591e159a5719 - legion_server::legion::channel_manager::tests::test_topic_setting::{{closure}}::hc0fa39264c8492fc
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/channel_manager.rs:1045:17
[INFO] [stdout]   22:     0x591e15989792 - <core::pin::Pin<P> as core::future::future::Future>::poll::h932caa71268998e0
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/future/future.rs:133:9
[INFO] [stdout]   23:     0x591e159897cd - <core::pin::Pin<P> as core::future::future::Future>::poll::he73aa8a77bffe3e2
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/future/future.rs:133:9
[INFO] [stdout]   24:     0x591e1598796d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::h19c9598bbda952a6
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:742:70
[INFO] [stdout]   25:     0x591e159878ab - tokio::task::coop::with_budget::hc7e11569ef8e5186
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs:167:5
[INFO] [stdout]   26:     0x591e159878ab - tokio::task::coop::budget::h1e17267d73e7ade5
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs:133:5
[INFO] [stdout]   27:     0x591e159878ab - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::h88cc5309755f1be1
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:742:25
[INFO] [stdout]   28:     0x591e15984a60 - tokio::runtime::scheduler::current_thread::Context::enter::h03d4b8de5cbb1a54
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:432:19
[INFO] [stdout]   29:     0x591e15986ddd - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h8b3f933b3c69e852
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:741:44
[INFO] [stdout]   30:     0x591e15985ff4 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::h7a48bbd0a992a114
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:829:68
[INFO] [stdout]   31:     0x591e1596839b - tokio::runtime::context::scoped::Scoped<T>::set::h0272ef29e8df24cf
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   32:     0x591e15a269b9 - tokio::runtime::context::set_scheduler::{{closure}}::hc75ca718be458652
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs:176:38
[INFO] [stdout]   33:     0x591e1598e992 - std::thread::local::LocalKey<T>::try_with::h069ee2e5bcfdae3f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/local.rs:315:12
[INFO] [stdout]   34:     0x591e1598e67e - std::thread::local::LocalKey<T>::with::h4e63b5060df8b5c2
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/local.rs:279:20
[INFO] [stdout]   35:     0x591e15a268ed - tokio::runtime::context::set_scheduler::h5857b5e194543bca
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs:176:17
[INFO] [stdout]   36:     0x591e15985980 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h6204d185041c35cc
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:829:27
[INFO] [stdout]   37:     0x591e15986033 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::h8e4806a752fbde09
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:729:24
[INFO] [stdout]   38:     0x591e15984320 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::h7e067b43f6829791
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:200:33
[INFO] [stdout]   39:     0x591e159e2b20 - tokio::runtime::context::runtime::enter_runtime::h6decfc92deb32eb5
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   40:     0x591e15983d91 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::hb00b45033fbbe4ca
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:188:9
[INFO] [stdout]   41:     0x591e159e35f4 - tokio::runtime::runtime::Runtime::block_on_inner::hb14fbd43eb71f0e7
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs:356:52
[INFO] [stdout]   42:     0x591e159e37bc - tokio::runtime::runtime::Runtime::block_on::h15a171ecf37d4962
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs:330:18
[INFO] [stdout]   43:     0x591e159a506f - legion_server::legion::channel_manager::tests::test_topic_setting::hc7f921a20777b076
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/channel_manager.rs:1058:32
[INFO] [stdout]   44:     0x591e159a5b77 - legion_server::legion::channel_manager::tests::test_topic_setting::{{closure}}::hc58ef1d9cd146594
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/channel_manager.rs:1030:34
[INFO] [stdout]   45:     0x591e159555e6 - core::ops::function::FnOnce::call_once::h4c082839a6302d10
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   46:     0x591e15a5017b - core::ops::function::FnOnce::call_once::h70887edf07a630ba
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   47:     0x591e15a5017b - test::__rust_begin_short_backtrace::h27763c4cbbdb8601
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:663:18
[INFO] [stdout]   48:     0x591e15a65de5 - test::run_test_in_process::{{closure}}::h4dc8bc6d5e3924d3
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:686:74
[INFO] [stdout]   49:     0x591e15a65de5 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h75905e8ffe81974f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   50:     0x591e15a65de5 - std::panicking::catch_unwind::do_call::h0bc60366ba66eba5
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:590:40
[INFO] [stdout]   51:     0x591e15a65de5 - std::panicking::catch_unwind::hae1ec7bf94407afa
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:553:19
[INFO] [stdout]   52:     0x591e15a65de5 - std::panic::catch_unwind::h0f4ff4773d84d3cd
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panic.rs:359:14
[INFO] [stdout]   53:     0x591e15a65de5 - test::run_test_in_process::h03fbc77ae48b3f10
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:686:27
[INFO] [stdout]   54:     0x591e15a65de5 - test::run_test::{{closure}}::h83476a9c453dc4d3
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:607:43
[INFO] [stdout]   55:     0x591e15a3c5d4 - test::run_test::{{closure}}::h515482ad1e7fe7de
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:637:41
[INFO] [stdout]   56:     0x591e15a3c5d4 - std::sys::backtrace::__rust_begin_short_backtrace::hed09f6ac5fe9d647
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:158:18
[INFO] [stdout]   57:     0x591e15a3fe9a - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h988e2cd969319888
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/mod.rs:559:17
[INFO] [stdout]   58:     0x591e15a3fe9a - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hd70e28dc46ec20be
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   59:     0x591e15a3fe9a - std::panicking::catch_unwind::do_call::hdc29e11311eb7655
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:590:40
[INFO] [stdout]   60:     0x591e15a3fe9a - std::panicking::catch_unwind::h9e402d6a96fef41c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:553:19
[INFO] [stdout]   61:     0x591e15a3fe9a - std::panic::catch_unwind::h9213c0c54aec70e0
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panic.rs:359:14
[INFO] [stdout]   62:     0x591e15a3fe9a - std::thread::Builder::spawn_unchecked_::{{closure}}::h6262965869ed2b87
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/mod.rs:557:30
[INFO] [stdout]   63:     0x591e15a3fe9a - core::ops::function::FnOnce::call_once{{vtable.shim}}::h05c05ed02619e462
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   64:     0x591e15e87fff - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h2044e71c41d3958a
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1985:9
[INFO] [stdout]   65:     0x591e15e87fff - std::sys::thread::unix::Thread::new::thread_start::hf277835320aa8e5a
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/thread/unix.rs:126:17
[INFO] [stdout]   66:     0x746fb9439aa4 - <unknown>
[INFO] [stdout]   67:     0x746fb94c6a34 - clone
[INFO] [stdout]   68:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- legion::session::tests::test_legion_activation stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'legion::session::tests::test_legion_activation' (92) panicked at src/legion/session.rs:296:9:
[INFO] [stdout] assertion failed: !session.is_legion_active().await
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x591e15eb3e12 - std::backtrace_rs::backtrace::libunwind::trace::hcab59e1e990fdc24
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x591e15eb3e12 - std::backtrace_rs::backtrace::trace_unsynchronized::he24cc57f3d2f47b7
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x591e15eb3e12 - std::sys::backtrace::_print_fmt::hf8d65ede198eeb54
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:66:9
[INFO] [stdout]    3:     0x591e15eb3e12 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h67edf0e4d33c343c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:39:26
[INFO] [stdout]    4:     0x591e15ec69ef - core::fmt::rt::Argument::fmt::hef94184842aeafdd
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/fmt/rt.rs:173:76
[INFO] [stdout]    5:     0x591e15ec69ef - core::fmt::write::hcf0c66b48a8fa606
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/fmt/mod.rs:1468:25
[INFO] [stdout]    6:     0x591e15e80b41 - std::io::default_write_fmt::h69967ac0ba93195f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x591e15e80b41 - std::io::Write::write_fmt::h8db9396209deaa1c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/io/mod.rs:1954:13
[INFO] [stdout]    8:     0x591e15e8cd62 - std::sys::backtrace::BacktraceLock::print::h07e5435aa717b414
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:42:9
[INFO] [stdout]    9:     0x591e15e91b8f - std::panicking::default_hook::{{closure}}::h91001850288db5f7
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:301:27
[INFO] [stdout]   10:     0x591e15e91a21 - std::panicking::default_hook::h2346dbb704ef5512
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:325:9
[INFO] [stdout]   11:     0x591e15a503be - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h18383b2e29377420
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1999:9
[INFO] [stdout]   12:     0x591e15a503be - test::test_main_with_exit_callback::{{closure}}::h272d7ef99aef06dc
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x591e15e922ff - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h6dba6e441651a0d1
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1999:9
[INFO] [stdout]   14:     0x591e15e922ff - std::panicking::panic_with_hook::hd2b063a6090d23a4
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:842:13
[INFO] [stdout]   15:     0x591e15e92076 - std::panicking::panic_handler::{{closure}}::he666d95f139a333e
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:700:13
[INFO] [stdout]   16:     0x591e15e8ce99 - std::sys::backtrace::__rust_end_short_backtrace::h631ad224854ebee5
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:174:18
[INFO] [stdout]   17:     0x591e15e74fbd - __rustc[1d67440d6e82e4f]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:698:5
[INFO] [stdout]   18:     0x591e15ecf8c0 - core::panicking::panic_fmt::h420ddb7fd73daf53
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panicking.rs:75:14
[INFO] [stdout]   19:     0x591e15ecf89c - core::panicking::panic::h355c5fec13755e30
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panicking.rs:145:5
[INFO] [stdout]   20:     0x591e15a128eb - legion_server::legion::session::tests::test_legion_activation::{{closure}}::h1782f1679d6d9589
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/session.rs:296:9
[INFO] [stdout]   21:     0x591e15989792 - <core::pin::Pin<P> as core::future::future::Future>::poll::h932caa71268998e0
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/future/future.rs:133:9
[INFO] [stdout]   22:     0x591e159897cd - <core::pin::Pin<P> as core::future::future::Future>::poll::he73aa8a77bffe3e2
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/future/future.rs:133:9
[INFO] [stdout]   23:     0x591e1598796d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::h19c9598bbda952a6
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:742:70
[INFO] [stdout]   24:     0x591e159878ab - tokio::task::coop::with_budget::hc7e11569ef8e5186
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs:167:5
[INFO] [stdout]   25:     0x591e159878ab - tokio::task::coop::budget::h1e17267d73e7ade5
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/task/coop/mod.rs:133:5
[INFO] [stdout]   26:     0x591e159878ab - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::h88cc5309755f1be1
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:742:25
[INFO] [stdout]   27:     0x591e15984a60 - tokio::runtime::scheduler::current_thread::Context::enter::h03d4b8de5cbb1a54
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:432:19
[INFO] [stdout]   28:     0x591e15986ddd - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h8b3f933b3c69e852
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:741:44
[INFO] [stdout]   29:     0x591e15985ff4 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::h7a48bbd0a992a114
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:829:68
[INFO] [stdout]   30:     0x591e1596839b - tokio::runtime::context::scoped::Scoped<T>::set::h0272ef29e8df24cf
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   31:     0x591e15a269b9 - tokio::runtime::context::set_scheduler::{{closure}}::hc75ca718be458652
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs:176:38
[INFO] [stdout]   32:     0x591e1598e992 - std::thread::local::LocalKey<T>::try_with::h069ee2e5bcfdae3f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/local.rs:315:12
[INFO] [stdout]   33:     0x591e1598e67e - std::thread::local::LocalKey<T>::with::h4e63b5060df8b5c2
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/local.rs:279:20
[INFO] [stdout]   34:     0x591e15a268ed - tokio::runtime::context::set_scheduler::h5857b5e194543bca
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context.rs:176:17
[INFO] [stdout]   35:     0x591e15985980 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h6204d185041c35cc
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:829:27
[INFO] [stdout]   36:     0x591e15986033 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::h8e4806a752fbde09
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:729:24
[INFO] [stdout]   37:     0x591e15984320 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::h7e067b43f6829791
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:200:33
[INFO] [stdout]   38:     0x591e159e2b20 - tokio::runtime::context::runtime::enter_runtime::h6decfc92deb32eb5
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   39:     0x591e15983d91 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::hb00b45033fbbe4ca
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/scheduler/current_thread/mod.rs:188:9
[INFO] [stdout]   40:     0x591e159e35f4 - tokio::runtime::runtime::Runtime::block_on_inner::hb14fbd43eb71f0e7
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs:356:52
[INFO] [stdout]   41:     0x591e159e37bc - tokio::runtime::runtime::Runtime::block_on::h15a171ecf37d4962
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.47.1/src/runtime/runtime.rs:330:18
[INFO] [stdout]   42:     0x591e15a12293 - legion_server::legion::session::tests::test_legion_activation::h36b8e876f14c68c1
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/session.rs:299:50
[INFO] [stdout]   43:     0x591e15a12c77 - legion_server::legion::session::tests::test_legion_activation::{{closure}}::h92a02a0778214f43
[INFO] [stdout]                                at /opt/rustwide/workdir/src/legion/session.rs:292:38
[INFO] [stdout]   44:     0x591e159571e6 - core::ops::function::FnOnce::call_once::he7b830b2683ab090
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   45:     0x591e15a5017b - core::ops::function::FnOnce::call_once::h70887edf07a630ba
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   46:     0x591e15a5017b - test::__rust_begin_short_backtrace::h27763c4cbbdb8601
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:663:18
[INFO] [stdout]   47:     0x591e15a65de5 - test::run_test_in_process::{{closure}}::h4dc8bc6d5e3924d3
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:686:74
[INFO] [stdout]   48:     0x591e15a65de5 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h75905e8ffe81974f
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   49:     0x591e15a65de5 - std::panicking::catch_unwind::do_call::h0bc60366ba66eba5
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:590:40
[INFO] [stdout]   50:     0x591e15a65de5 - std::panicking::catch_unwind::hae1ec7bf94407afa
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:553:19
[INFO] [stdout]   51:     0x591e15a65de5 - std::panic::catch_unwind::h0f4ff4773d84d3cd
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panic.rs:359:14
[INFO] [stdout]   52:     0x591e15a65de5 - test::run_test_in_process::h03fbc77ae48b3f10
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:686:27
[INFO] [stdout]   53:     0x591e15a65de5 - test::run_test::{{closure}}::h83476a9c453dc4d3
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:607:43
[INFO] [stdout]   54:     0x591e15a3c5d4 - test::run_test::{{closure}}::h515482ad1e7fe7de
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/test/src/lib.rs:637:41
[INFO] [stdout]   55:     0x591e15a3c5d4 - std::sys::backtrace::__rust_begin_short_backtrace::hed09f6ac5fe9d647
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/backtrace.rs:158:18
[INFO] [stdout]   56:     0x591e15a3fe9a - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h988e2cd969319888
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/mod.rs:559:17
[INFO] [stdout]   57:     0x591e15a3fe9a - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hd70e28dc46ec20be
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   58:     0x591e15a3fe9a - std::panicking::catch_unwind::do_call::hdc29e11311eb7655
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:590:40
[INFO] [stdout]   59:     0x591e15a3fe9a - std::panicking::catch_unwind::h9e402d6a96fef41c
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panicking.rs:553:19
[INFO] [stdout]   60:     0x591e15a3fe9a - std::panic::catch_unwind::h9213c0c54aec70e0
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/panic.rs:359:14
[INFO] [stdout]   61:     0x591e15a3fe9a - std::thread::Builder::spawn_unchecked_::{{closure}}::h6262965869ed2b87
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/thread/mod.rs:557:30
[INFO] [stdout]   62:     0x591e15a3fe9a - core::ops::function::FnOnce::call_once{{vtable.shim}}::h05c05ed02619e462
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   63:     0x591e15e87fff - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h2044e71c41d3958a
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/alloc/src/boxed.rs:1985:9
[INFO] [stdout]   64:     0x591e15e87fff - std::sys::thread::unix::Thread::new::thread_start::hf277835320aa8e5a
[INFO] [stdout]                                at /rustc/bb624dcb4c8ab987e10c0808d92d76f3b84dd117/library/std/src/sys/thread/unix.rs:126:17
[INFO] [stdout]   65:     0x746fb9439aa4 - <unknown>
[INFO] [stdout]   66:     0x746fb94c6a34 - clone
[INFO] [stdout]   67:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     legion::channel_manager::tests::test_channel_creation
[INFO] [stdout]     legion::channel_manager::tests::test_topic_setting
[INFO] [stdout]     legion::session::tests::test_legion_activation
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 77 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--bin legion-server`
[INFO] running `Command { std: "docker" "inspect" "566a9f9c2b83b5ab437008d1dead8c8f14f8d6811bbf0e615ba644386d4b75b5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "566a9f9c2b83b5ab437008d1dead8c8f14f8d6811bbf0e615ba644386d4b75b5", kill_on_drop: false }`
[INFO] [stdout] 566a9f9c2b83b5ab437008d1dead8c8f14f8d6811bbf0e615ba644386d4b75b5
