[INFO] fetching crate legion-server 0.1.0... [INFO] testing legion-server-0.1.0 against try#b83b707f97d809763b7861afa7638871f3339a33 for pr-145838-1 [INFO] extracting crate legion-server 0.1.0 into /workspace/builds/worker-4-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-4-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate legion-server 0.1.0 on toolchain b83b707f97d809763b7861afa7638871f3339a33 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "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" "+b83b707f97d809763b7861afa7638871f3339a33" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 816ebf5cfb8c32dc8a3e3386b998ef2ba1c7d17dc1f73c2c97389a25d55e0cee [INFO] running `Command { std: "docker" "start" "-a" "816ebf5cfb8c32dc8a3e3386b998ef2ba1c7d17dc1f73c2c97389a25d55e0cee", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "816ebf5cfb8c32dc8a3e3386b998ef2ba1c7d17dc1f73c2c97389a25d55e0cee", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "816ebf5cfb8c32dc8a3e3386b998ef2ba1c7d17dc1f73c2c97389a25d55e0cee", kill_on_drop: false }` [INFO] [stdout] 816ebf5cfb8c32dc8a3e3386b998ef2ba1c7d17dc1f73c2c97389a25d55e0cee [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 97c469b99cf6b851a88bdc1bf8a702629f3cc23296da6ac7733a161060aa7744 [INFO] running `Command { std: "docker" "start" "-a" "97c469b99cf6b851a88bdc1bf8a702629f3cc23296da6ac7733a161060aa7744", kill_on_drop: false }` [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling subtle v2.6.1 [INFO] [stderr] Compiling socket2 v0.6.0 [INFO] [stderr] Compiling futures-io v0.3.31 [INFO] [stderr] Compiling hashbrown v0.15.4 [INFO] [stderr] Compiling cc v1.2.31 [INFO] [stderr] Compiling zeroize_derive v1.4.2 [INFO] [stderr] Compiling crypto-common v0.1.6 [INFO] [stderr] Compiling serde_json v1.0.142 [INFO] [stderr] Compiling rustls-pki-types v1.12.0 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling futures-sink v0.3.31 [INFO] [stderr] Compiling getrandom v0.3.3 [INFO] [stderr] Compiling signal-hook-registry v1.4.5 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling futures-channel v0.3.31 [INFO] [stderr] Compiling rustls v0.23.31 [INFO] [stderr] Compiling tinyvec v1.9.0 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling atoi v2.0.0 [INFO] [stderr] Compiling spin v0.9.8 [INFO] [stderr] Compiling webpki-roots v1.0.2 [INFO] [stderr] Compiling concurrent-queue v2.5.0 [INFO] [stderr] Compiling hashbrown v0.14.5 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling tokio v1.47.1 [INFO] [stderr] Compiling tracing-core v0.1.34 [INFO] [stderr] Compiling webpki-roots v0.26.11 [INFO] [stderr] Compiling hmac v0.12.1 [INFO] [stderr] Compiling crossbeam-queue v0.3.12 [INFO] [stderr] Compiling indexmap v2.10.0 [INFO] [stderr] Compiling hashlink v0.10.0 [INFO] [stderr] Compiling event-listener v5.4.0 [INFO] [stderr] Compiling zeroize v1.8.1 [INFO] [stderr] Compiling tracing v0.1.41 [INFO] [stderr] Compiling unicode-normalization v0.1.24 [INFO] [stderr] Compiling chrono v0.4.41 [INFO] [stderr] Compiling base64 v0.22.1 [INFO] [stderr] Compiling uuid v1.17.0 [INFO] [stderr] Compiling unicode-properties v0.1.3 [INFO] [stderr] Compiling cmake v0.1.54 [INFO] [stderr] Compiling unicode-bidi v0.3.18 [INFO] [stderr] Compiling pest v2.8.1 [INFO] [stderr] Compiling const-random-macro v0.1.16 [INFO] [stderr] Compiling curve25519-dalek v4.1.3 [INFO] [stderr] Compiling stringprep v0.1.5 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling dotenvy v0.15.7 [INFO] [stderr] Compiling whoami v1.6.0 [INFO] [stderr] Compiling const-random v0.1.18 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling hkdf v0.12.4 [INFO] [stderr] Compiling flume v0.11.1 [INFO] [stderr] Compiling md-5 v0.10.6 [INFO] [stderr] Compiling curve25519-dalek-derive v0.1.1 [INFO] [stderr] Compiling bitflags v2.9.1 [INFO] [stderr] Compiling regex-automata v0.4.9 [INFO] [stderr] Compiling cipher v0.4.4 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling aws-lc-sys v0.30.0 [INFO] [stderr] Compiling libsqlite3-sys v0.30.1 [INFO] [stderr] Compiling futures-executor v0.3.31 [INFO] [stderr] Compiling blake3 v1.8.2 [INFO] [stderr] Compiling pest_meta v2.8.1 [INFO] [stderr] Compiling dlv-list v0.5.2 [INFO] [stderr] Compiling rand_core v0.9.3 [INFO] [stderr] Compiling universal-hash v0.5.1 [INFO] [stderr] Compiling winnow v0.7.12 [INFO] [stderr] Compiling portable-atomic v1.11.1 [INFO] [stderr] Compiling signature v2.2.0 [INFO] [stderr] Compiling poly1305 v0.8.0 [INFO] [stderr] Compiling ordered-multimap v0.7.3 [INFO] [stderr] Compiling chacha20 v0.9.1 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling hashlink v0.8.4 [INFO] [stderr] Compiling aead v0.5.2 [INFO] [stderr] Compiling encoding_rs v0.8.35 [INFO] [stderr] Compiling base64ct v1.8.0 [INFO] [stderr] Compiling rustls v0.22.4 [INFO] [stderr] Compiling arrayref v0.3.9 [INFO] [stderr] Compiling chacha20poly1305 v0.10.1 [INFO] [stderr] Compiling pest_generator v2.8.1 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling rust-ini v0.20.0 [INFO] [stderr] Compiling password-hash v0.5.0 [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 bytes v1.10.1 [INFO] [stderr] Compiling futures-intrusive v0.5.0 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling idna v1.0.3 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling url v2.5.4 [INFO] [stderr] Compiling tokio-stream v0.1.17 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling regex v1.11.1 [INFO] [stderr] Compiling pest_derive v2.8.1 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling raw-cpuid v11.5.0 [INFO] [stderr] Compiling ed25519 v2.2.3 [INFO] [stderr] Compiling x25519-dalek v2.0.1 [INFO] [stderr] Compiling ed25519-dalek v2.2.0 [INFO] [stderr] Compiling json5 v0.4.1 [INFO] [stderr] Compiling yaml-rust2 v0.8.1 [INFO] [stderr] Compiling ron v0.8.1 [INFO] [stderr] Compiling dashmap v6.1.0 [INFO] [stderr] Compiling bincode v1.3.3 [INFO] [stderr] Compiling pbkdf2 v0.12.2 [INFO] [stderr] Compiling blake2 v0.10.6 [INFO] [stderr] Compiling pin-project-internal v1.1.10 [INFO] [stderr] Compiling spinning_top v0.3.0 [INFO] [stderr] Compiling thread_local v1.1.9 [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 argon2 v0.5.3 [INFO] [stderr] Compiling tracing-subscriber v0.3.19 [INFO] [stderr] Compiling legion-protocol v0.1.0 [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 quanta v0.12.6 [INFO] [stderr] Compiling pin-project v1.1.10 [INFO] [stderr] Compiling governor v0.8.1 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling rustls-webpki v0.103.4 [INFO] [stderr] Compiling rustls-webpki v0.102.8 [INFO] [stderr] Compiling config v0.14.1 [INFO] [stderr] Compiling tokio-util v0.7.15 [INFO] [stderr] Compiling phalanx-crypto v0.1.0 [INFO] [stderr] Compiling sqlx-core v0.8.6 [INFO] [stderr] Compiling sqlx-postgres v0.8.6 [INFO] [stderr] Compiling sqlx-sqlite v0.8.6 [INFO] [stderr] Compiling aws-lc-rs v1.13.3 [INFO] [stderr] Compiling sqlx-macros-core v0.8.6 [INFO] [stderr] Compiling sqlx-macros v0.8.6 [INFO] [stderr] Compiling tokio-rustls v0.26.2 [INFO] [stderr] Compiling sqlx v0.8.6 [INFO] [stderr] Compiling legion-server v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `bytes::BytesMut` [INFO] [stdout] --> src/actors/connection.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use bytes::BytesMut; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `timeout` [INFO] [stdout] --> src/actors/connection.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | use tokio::time::{interval, timeout}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `trace` and `warn` [INFO] [stdout] --> src/actors/connection.rs:13:35 [INFO] [stdout] | [INFO] [stdout] 13 | use tracing::{debug, error, info, warn, trace}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/actors/channel.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `warn` [INFO] [stdout] --> src/actors/channel.rs:6:28 [INFO] [stdout] | [INFO] [stdout] 6 | use tracing::{debug, info, warn}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ChannelMember` [INFO] [stdout] --> src/actors/channel.rs:9:29 [INFO] [stdout] | [INFO] [stdout] 9 | use crate::state::{Channel, ChannelMember, ServerState}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `self::channel::ChannelActor` [INFO] [stdout] --> src/actors/mod.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub use self::channel::ChannelActor; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> src/commands/mod.rs:4:22 [INFO] [stdout] | [INFO] [stdout] 4 | use tracing::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/notice.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/list.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/nick.rs:4:32 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `HistoryItem` and `MessageType` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:5:22 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::history::{HistoryItem, HistoryQuery, QueryResult, MessageType}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `StandardReply` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:6:41 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::commands::standard_replies::{StandardReply, common}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/commands/handlers/query.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 17 - (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] 17 + conn.nickname.clone().unwrap_or_else(|| "*".to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> src/history/mod.rs:2:34 [INFO] [stdout] | [INFO] [stdout] 2 | use std::collections::{BTreeMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::RwLock` [INFO] [stdout] --> src/history/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::sync::RwLock; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `format_timestamp` [INFO] [stdout] --> src/history/storage.rs:1:39 [INFO] [stdout] | [INFO] [stdout] 1 | use super::{HistoryItem, MessageType, format_timestamp}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `HistoryConfig` [INFO] [stdout] --> src/history/mod.rs:10:35 [INFO] [stdout] | [INFO] [stdout] 10 | pub use storage::{HistoryStorage, HistoryConfig}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `is_legion_encrypted_channel` [INFO] [stdout] --> src/legion/channels.rs:6:30 [INFO] [stdout] | [INFO] [stdout] 6 | use legion_protocol::utils::{is_legion_encrypted_channel, ChannelType, get_channel_type}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/keys.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, protocol::KeyRotationMessage}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/federation.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PublicKey` [INFO] [stdout] --> src/legion/channel_manager.rs:9:32 [INFO] [stdout] | [INFO] [stdout] 9 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn` [INFO] [stdout] --> src/legion/channel_manager.rs:14:15 [INFO] [stdout] | [INFO] [stdout] 14 | use tracing::{debug, info, warn, error}; [INFO] [stdout] | ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IronSession` and `IronVersion` [INFO] [stdout] --> src/legion/mod.rs:14:23 [INFO] [stdout] | [INFO] [stdout] 14 | use legion_protocol::{IronSession, IronVersion, Capability}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PhalanxGroup` [INFO] [stdout] --> src/legion/mod.rs:15:32 [INFO] [stdout] | [INFO] [stdout] 15 | use phalanx_crypto::{Identity, PhalanxGroup, AsyncPhalanxGroup}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Command as ProtocolCommand` [INFO] [stdout] --> src/protocol/mod.rs:2:35 [INFO] [stdout] | [INFO] [stdout] 2 | use legion_protocol::{IrcMessage, Command as ProtocolCommand, IronError}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/protocol/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/protocol/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Buf` [INFO] [stdout] --> src/protocol/codec.rs:1:13 [INFO] [stdout] | [INFO] [stdout] 1 | use bytes::{Buf, BufMut, BytesMut}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::FromStr` [INFO] [stdout] --> src/protocol/commands.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::str::FromStr; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `CapabilityHandler`, `CapabilitySet`, `Capability`, `constants`, and `utils` [INFO] [stdout] --> src/protocol/mod.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | Capability, CapabilitySet, CapabilityHandler, [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 24 | constants, utils, Reply [INFO] [stdout] | ^^^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SaslAuth` and `SaslMechanism` [INFO] [stdout] --> src/protocol/mod.rs:27:33 [INFO] [stdout] | [INFO] [stdout] 27 | pub use legion_protocol::sasl::{SaslAuth, SaslMechanism}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `legion_protocol::bleeding_edge` [INFO] [stdout] --> src/protocol/mod.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | pub use legion_protocol::bleeding_edge; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Argon2` and `PasswordHash` [INFO] [stdout] --> src/security/auth.rs:1:14 [INFO] [stdout] | [INFO] [stdout] 1 | use argon2::{Argon2, PasswordHash}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PasswordHasher as ArgonPasswordHasher`, `SaltString`, and `rand_core::OsRng` [INFO] [stdout] --> src/security/auth.rs:2:29 [INFO] [stdout] | [INFO] [stdout] 2 | use argon2::password_hash::{rand_core::OsRng, SaltString, PasswordHasher as ArgonPasswordHasher}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AuthMethod`, `SaslMechanism`, and `authenticate` [INFO] [stdout] --> src/security/mod.rs:14:22 [INFO] [stdout] | [INFO] [stdout] 14 | pub use self::auth::{AuthMethod, SaslMechanism, authenticate}; [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `validate_message` and `validate_nickname` [INFO] [stdout] --> src/security/mod.rs:15:28 [INFO] [stdout] | [INFO] [stdout] 15 | pub use self::validation::{validate_nickname, validate_channel_name, validate_message}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:45:70 [INFO] [stdout] | [INFO] [stdout] 45 | matches!(cap, Capability::LegionProtocolV1 | Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:52:58 [INFO] [stdout] | [INFO] [stdout] 52 | } else if capabilities.contains(&Capability::IronProtocolV1) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:74:49 [INFO] [stdout] | [INFO] [stdout] 74 | self.capabilities.contains(&Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:128:17 [INFO] [stdout] | [INFO] [stdout] 128 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `cap_version` [INFO] [stdout] --> src/actors/connection.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | let cap_version = if !params.is_empty() { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cap_version` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:244:33 [INFO] [stdout] | [INFO] [stdout] 244 | ... let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:299:17 [INFO] [stdout] | [INFO] [stdout] 299 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:349:17 [INFO] [stdout] | [INFO] [stdout] 349 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/join.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 14 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/part.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:16 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:22 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:16 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:22 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member_nick` [INFO] [stdout] --> src/commands/handlers/who.rs:37:37 [INFO] [stdout] | [INFO] [stdout] 37 | if let Some(member_nick) = &member_conn.nickname { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_member_nick` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `target_conn` [INFO] [stdout] --> src/commands/handlers/who.rs:66:25 [INFO] [stdout] | [INFO] [stdout] 66 | if let Some(target_conn) = state.connections.get(&target_id) { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_conn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | let mut mode_args = mode_params[1..].to_vec(); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/nick.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `policy` [INFO] [stdout] --> src/legion/keys.rs:259:17 [INFO] [stdout] | [INFO] [stdout] 259 | let policy = drop(keys); [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_policy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/keys.rs:339:18 [INFO] [stdout] | [INFO] [stdout] 339 | for (channel, channel_keys) in keys.iter_mut() { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:298:84 [INFO] [stdout] | [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:319:87 [INFO] [stdout] | [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `cleaned_servers` is never read [INFO] [stdout] --> src/legion/federation.rs:361:17 [INFO] [stdout] | [INFO] [stdout] 361 | let mut cleaned_servers = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member` [INFO] [stdout] --> src/legion/channel_manager.rs:525:33 [INFO] [stdout] | [INFO] [stdout] 525 | if let Some(member) = channel.members.remove(target_user) { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_member` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `operator_identity` [INFO] [stdout] --> src/legion/channel_manager.rs:753:9 [INFO] [stdout] | [INFO] [stdout] 753 | operator_identity: &Identity, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_operator_identity` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/mod.rs:229:13 [INFO] [stdout] | [INFO] [stdout] 229 | let channel = self.channels.get(&channel_name) [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `members::ChannelSettings` is more private than the item `members::ChannelStats::settings` [INFO] [stdout] --> src/legion/members.rs:635:5 [INFO] [stdout] | [INFO] [stdout] 635 | pub settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `members::ChannelStats::settings` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `members::ChannelSettings` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/members.rs:145:1 [INFO] [stdout] | [INFO] [stdout] 145 | struct ChannelSettings { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `TrustLevel` is more private than the item `FederationManager::add_federated_server` [INFO] [stdout] --> src/legion/federation.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 185 | pub async fn add_federated_server(&self, hostname: String, public_key: PublicKey, trust_level: TrustLevel) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `FederationManager::add_federated_server` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `TrustLevel` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:51:1 [INFO] [stdout] | [INFO] [stdout] 51 | enum TrustLevel { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `FederationStatus` is more private than the item `FederationManager::update_server_status` [INFO] [stdout] --> src/legion/federation.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `FederationManager::update_server_status` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `FederationStatus` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:42:1 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `ActivityEntry` is more private than the item `ExtendedChannelInfo::recent_activity` [INFO] [stdout] --> src/legion/channel_manager.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | pub recent_activity: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `ExtendedChannelInfo::recent_activity` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `ActivityEntry` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/channel_manager.rs:124:1 [INFO] [stdout] | [INFO] [stdout] 124 | struct ActivityEntry { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PING_TIMEOUT` is never used [INFO] [stdout] --> src/actors/connection.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const PING_TIMEOUT: Duration = Duration::from_secs(60); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/connection.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct ConnectionActor { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/channel.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ChannelActor { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 16 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Invite` is never constructed [INFO] [stdout] --> src/actors/channel.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub enum ChannelMessage { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Invite { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/server.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ServerActor { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 15 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `ConnectionCommand`, `CreateChannel`, `RemoveChannel`, `BroadcastMessage`, and `ServerNotice` are never constructed [INFO] [stdout] --> src/actors/server.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 19 | pub enum ServerMessage { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 20 | ConnectionCommand { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 24 | CreateChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | RemoveChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | BroadcastMessage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 35 | ServerNotice { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CommandProcessor` is never constructed [INFO] [stdout] --> src/commands/mod.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct CommandProcessor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `process` are never used [INFO] [stdout] --> src/commands/mod.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 16 | impl CommandProcessor { [INFO] [stdout] | --------------------- associated items in this implementation [INFO] [stdout] 17 | pub fn new(server_state: Arc>) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | pub async fn process( [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_notice` is never used [INFO] [stdout] --> src/commands/handlers/notice.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn handle_notice( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_oper` is never used [INFO] [stdout] --> src/commands/handlers/oper.rs:6:14 [INFO] [stdout] | [INFO] [stdout] 6 | pub async fn handle_oper( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_nick` is never used [INFO] [stdout] --> src/commands/handlers/nick.rs:9:14 [INFO] [stdout] | [INFO] [stdout] 9 | pub async fn handle_nick( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Warn` and `Note` are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 8 | pub enum StandardReplyType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 12 | Warn, [INFO] [stdout] | ^^^^ [INFO] [stdout] 13 | /// NOTE - Provides informational messages [INFO] [stdout] 14 | Note, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 29 | pub enum StandardReplyCode { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 32 | AccountRequiredToConnect, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 38 | NeedMoreParams, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 39 | /// Message could not be retrieved [INFO] [stdout] 40 | MessageError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 41 | /// Unknown error occurred [INFO] [stdout] 42 | UnknownError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | CannotSendToChan, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 47 | /// No such channel exists [INFO] [stdout] 48 | NoSuchChannel, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 49 | /// Not on channel [INFO] [stdout] 50 | NotOnChannel, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 51 | /// Channel is invite-only [INFO] [stdout] 52 | InviteOnlyChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 53 | /// Channel key required [INFO] [stdout] 54 | BadChannelKey, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 55 | /// Channel is full [INFO] [stdout] 56 | ChannelIsFull, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 57 | /// Banned from channel [INFO] [stdout] 58 | BannedFromChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | NoSuchNick, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 63 | /// Nickname in use [INFO] [stdout] 64 | NicknameInUse, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 65 | /// Invalid nickname [INFO] [stdout] 66 | InvalidNickname, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | SaslFail, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | /// Invalid credentials provided [INFO] [stdout] 72 | InvalidCredentials, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 73 | /// Registration failed [INFO] [stdout] 74 | RegFail, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 75 | /// Account registration callback invalid [INFO] [stdout] 76 | RegInvalidCallback, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 77 | /// Account already registered [INFO] [stdout] 78 | AlreadyRegistered, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | UnknownCommand, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 83 | /// Command disabled [INFO] [stdout] 84 | CommandDisabled, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | RateLimitExceeded, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 89 | /// Resource limit exceeded [INFO] [stdout] 90 | ResourceLimit, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 93 | Custom(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyCode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `warn`, `note`, and `with_context` are never used [INFO] [stdout] --> src/commands/standard_replies.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 144 | impl StandardReply { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn warn(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 168 | pub fn note(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn with_context(mut self, context: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:225:12 [INFO] [stdout] | [INFO] [stdout] 225 | pub fn no_such_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_nick` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:231:12 [INFO] [stdout] | [INFO] [stdout] 231 | pub fn no_such_nick(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `not_on_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:237:12 [INFO] [stdout] | [INFO] [stdout] 237 | pub fn not_on_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `cannot_send_to_chan` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:243:12 [INFO] [stdout] | [INFO] [stdout] 243 | pub fn cannot_send_to_chan(command: &str, channel: &str, reason: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `nickname_in_use` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:249:12 [INFO] [stdout] | [INFO] [stdout] 249 | pub fn nickname_in_use(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `invalid_nickname` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:255:12 [INFO] [stdout] | [INFO] [stdout] 255 | pub fn invalid_nickname(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unknown_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub fn unknown_command(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `rate_limit_exceeded` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:267:12 [INFO] [stdout] | [INFO] [stdout] 267 | pub fn rate_limit_exceeded(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `deprecated_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:272:12 [INFO] [stdout] | [INFO] [stdout] 272 | pub fn deprecated_command(command: &str, alternative: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `info_note` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:278:12 [INFO] [stdout] | [INFO] [stdout] 278 | pub fn info_note(command: &str, message: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `DatabaseError` is never used [INFO] [stdout] --> src/db/mod.rs:12:10 [INFO] [stdout] | [INFO] [stdout] 12 | pub enum DatabaseError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Database` is never used [INFO] [stdout] --> src/db/mod.rs:30:10 [INFO] [stdout] | [INFO] [stdout] 30 | pub enum Database { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/db/mod.rs:36:18 [INFO] [stdout] | [INFO] [stdout] 35 | impl Database { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 36 | pub async fn connect_postgres(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub async fn connect_sqlite(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub async fn run_migrations(&self) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub async fn create_user(&self, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub async fn get_user_by_nickname(&self, nickname: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn get_user_by_id(&self, id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 64 | pub async fn update_user(&self, user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub async fn authenticate_user(&self, nickname: &str, password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 73 | pub async fn create_channel(&self, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | pub async fn get_channel(&self, name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 81 | pub async fn update_channel(&self, channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn delete_channel(&self, name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub async fn list_channels(&self) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 94 | pub async fn add_channel_member(&self, member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | pub async fn remove_channel_member(&self, channel: &str, user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 102 | pub async fn get_channel_members(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn get_user_channels(&self, user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 111 | pub async fn add_ban(&self, ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub async fn remove_ban(&self, channel: &str, mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 119 | pub async fn get_channel_bans(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 123 | pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 128 | pub async fn get_server_config(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | pub async fn update_server_config(&self, config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `User` is never constructed [INFO] [stdout] --> src/db/models.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct User { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl User { [INFO] [stdout] | --------- associated function in this implementation [INFO] [stdout] 25 | pub fn new(nickname: String, username: String, realname: String, password_hash: String) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Channel` is never constructed [INFO] [stdout] --> src/db/models.rs:47:12 [INFO] [stdout] | [INFO] [stdout] 47 | pub struct Channel { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:66:12 [INFO] [stdout] | [INFO] [stdout] 65 | impl Channel { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 66 | pub fn new(name: String, founder: Option) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelMember` is never constructed [INFO] [stdout] --> src/db/models.rs:88:12 [INFO] [stdout] | [INFO] [stdout] 88 | pub struct ChannelMember { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/db/models.rs:97:12 [INFO] [stdout] | [INFO] [stdout] 97 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ServerConfig` is never constructed [INFO] [stdout] --> src/db/models.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | pub struct ServerConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageLog` is never constructed [INFO] [stdout] --> src/db/models.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct MessageLog { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OperatorCredential` is never constructed [INFO] [stdout] --> src/db/models.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct OperatorCredential { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_user(_db: &Database, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_nickname` is never used [INFO] [stdout] --> src/db/queries/users.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_user_by_nickname( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_id` is never used [INFO] [stdout] --> src/db/queries/users.rs:16:14 [INFO] [stdout] | [INFO] [stdout] 16 | pub async fn get_user_by_id(_db: &Database, _id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:21:14 [INFO] [stdout] | [INFO] [stdout] 21 | pub async fn update_user(_db: &Database, _user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:26:14 [INFO] [stdout] | [INFO] [stdout] 26 | pub async fn authenticate_user( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_channel(_db: &Database, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_channel(_db: &Database, _name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn update_channel(_db: &Database, _channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `delete_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn delete_channel(_db: &Database, _name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:23:14 [INFO] [stdout] | [INFO] [stdout] 23 | pub async fn list_channels(_db: &Database) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:28:14 [INFO] [stdout] | [INFO] [stdout] 28 | pub async fn add_channel_member(_db: &Database, _member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | pub async fn remove_channel_member(_db: &Database, _channel: &str, _user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_members` is never used [INFO] [stdout] --> src/db/queries/channels.rs:38:14 [INFO] [stdout] | [INFO] [stdout] 38 | pub async fn get_channel_members(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:43:14 [INFO] [stdout] | [INFO] [stdout] 43 | pub async fn get_user_channels(_db: &Database, _user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn add_ban(_db: &Database, _ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn remove_ban(_db: &Database, _channel: &str, _mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_bans` is never used [INFO] [stdout] --> src/db/queries/bans.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn get_channel_bans(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_banned` is never used [INFO] [stdout] --> src/db/queries/bans.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn is_banned(_db: &Database, _channel: &str, _user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn get_server_config(_db: &Database) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn update_server_config(_db: &Database, _config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_schema_sql` is never used [INFO] [stdout] --> src/db/migrations.rs:3:8 [INFO] [stdout] | [INFO] [stdout] 3 | pub fn create_schema_sql() -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Config` is never constructed [INFO] [stdout] --> src/error.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub enum CenturionError { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 22 | Config(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CenturionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_msgid` and `timestamp_secs` are never used [INFO] [stdout] --> src/history/mod.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 56 | impl HistoryItem { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn has_msgid(&self, msgid: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn timestamp_secs(&self) -> u64 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `cleanup_old_messages` is never used [INFO] [stdout] --> src/history/storage.rs:286:12 [INFO] [stdout] | [INFO] [stdout] 195 | impl HistoryStorage { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 286 | pub fn cleanup_old_messages(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_empty` is never used [INFO] [stdout] --> src/history/queries.rs:33:12 [INFO] [stdout] | [INFO] [stdout] 11 | impl HistorySelector { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `start` and `end` are never read [INFO] [stdout] --> src/history/queries.rs:74:9 [INFO] [stdout] | [INFO] [stdout] 73 | Targets { [INFO] [stdout] | ------- fields in this variant [INFO] [stdout] 74 | start: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 75 | end: Option, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `HistoryQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Channel`, `Member`, `Key`, `Session`, and `Federation` are never constructed [INFO] [stdout] --> src/legion/mod.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum LegionError { [INFO] [stdout] | ----------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 36 | Channel(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | Member(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | Key(String), [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 48 | Session(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | Federation(String), [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `server_identity`, `channels`, `sessions`, `key_manager`, `member_manager`, and `federation_manager` are never read [INFO] [stdout] --> src/legion/mod.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 61 | pub struct LegionManager { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 62 | /// Server identity for Legion operations [INFO] [stdout] 63 | server_identity: Arc>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 64 | /// Active Legion channels [INFO] [stdout] 65 | channels: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 66 | /// Client sessions with Legion capabilities [INFO] [stdout] 67 | sessions: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 68 | /// Key manager for rotation and storage [INFO] [stdout] 69 | key_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 70 | /// Member manager for authentication and authorization [INFO] [stdout] 71 | member_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 72 | /// Federation manager for cross-server communication [INFO] [stdout] 73 | federation_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/mod.rs:95:18 [INFO] [stdout] | [INFO] [stdout] 76 | impl LegionManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 95 | pub async fn server_identity(&self) -> Identity { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 100 | pub async fn supports_legion(&self, client_id: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | pub async fn create_session(&self, client_id: String, capabilities: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 116 | pub async fn remove_session(&self, client_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 160 | pub async fn join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 200 | pub async fn leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 222 | pub async fn send_message( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 246 | pub async fn receive_message( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 277 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 285 | pub async fn list_channels(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 290 | pub async fn rotate_channel_keys(&self, channel_name: String, admin_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 312 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ChannelOperation` is never used [INFO] [stdout] --> src/legion/channels.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 13 | pub enum ChannelOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelEvent` is never constructed [INFO] [stdout] --> src/legion/channels.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct ChannelEvent { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/legion/channels.rs:41:12 [INFO] [stdout] | [INFO] [stdout] 39 | impl LegionManager { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 40 | /// Validate channel name for Legion Protocol [INFO] [stdout] 41 | pub fn validate_channel_name(channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn handle_create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | pub async fn handle_join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 114 | pub async fn handle_leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | pub async fn handle_send_message(&self, channel_name: String, sender_id: String, message: String) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec) -> LegionResult LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 201 | pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 231 | pub async fn list_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 252 | async fn log_channel_event(&self, event: ChannelEvent) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channels.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub struct ChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelSummary` is never constructed [INFO] [stdout] --> src/legion/channels.rs:271:12 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct ChannelSummary { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_OLD_KEYS` is never used [INFO] [stdout] --> src/legion/keys.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | const MAX_OLD_KEYS: usize = 10; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_keys`, `rotation_policies`, `kdf_context`, and `backup_handler` are never read [INFO] [stdout] --> src/legion/keys.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 22 | pub struct KeyManager { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 23 | /// Channel key storage [INFO] [stdout] 24 | channel_keys: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 25 | /// Key rotation policies [INFO] [stdout] 26 | rotation_policies: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 27 | /// Key derivation context [INFO] [stdout] 28 | kdf_context: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 29 | /// Backup storage handler [INFO] [stdout] 30 | backup_handler: Option>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KeyManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `current_rotation`, `old_rotations`, `created_at`, `last_rotation`, and `next_rotation` are never read [INFO] [stdout] --> src/legion/keys.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 35 | struct ChannelKeys { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 36 | /// Current active key rotation info [INFO] [stdout] 37 | current_rotation: KeyRotationInfo, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 38 | /// Previous keys for backward compatibility [INFO] [stdout] 39 | old_rotations: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 40 | /// Channel creation timestamp [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Last rotation timestamp [INFO] [stdout] 43 | last_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 44 | /// Next scheduled rotation [INFO] [stdout] 45 | next_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelKeys` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `store_backup`, `retrieve_backup`, `list_backups`, and `cleanup_backups` are never used [INFO] [stdout] --> src/legion/keys.rs:106:14 [INFO] [stdout] | [INFO] [stdout] 104 | pub trait BackupHandler: Send + Sync + std::fmt::Debug { [INFO] [stdout] | ------------- methods in this trait [INFO] [stdout] 105 | /// Store a key rotation backup [INFO] [stdout] 106 | async fn store_backup(&self, channel: &str, rotation: &KeyRotationInfo) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | async fn retrieve_backup(&self, channel: &str, sequence: u64) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | async fn list_backups(&self, channel: &str) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | async fn cleanup_backups(&self, channel: &str, keep_count: usize) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/keys.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 130 | impl KeyManager { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 146 | pub async fn set_backup_handler(&mut self, handler: Box) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 151 | pub async fn set_rotation_policy(&self, channel: String, policy: RotationPolicy) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 160 | pub async fn get_rotation_policy(&self, channel: &str) -> RotationPolicy { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 166 | pub async fn store_key_rotation(&self, channel: &str, rotation_msg: &KeyRotationMessage) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 215 | pub async fn get_current_rotation(&self, channel: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 247 | pub async fn needs_rotation(&self, channel: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | pub async fn schedule_rotation(&self, channel: &str, when: SystemTime) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 288 | pub async fn on_member_change(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 302 | pub async fn channel_stats(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 326 | pub async fn list_channels(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 332 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 365 | fn compute_key_fingerprint(&self, rotation_msg: &KeyRotationMessage) -> [u8; 32] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelKeyStats` is never constructed [INFO] [stdout] --> src/legion/keys.rs:382:12 [INFO] [stdout] | [INFO] [stdout] 382 | pub struct ChannelKeyStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/keys.rs:395:12 [INFO] [stdout] | [INFO] [stdout] 393 | impl ChannelKeyStats { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] 394 | /// Convert to JSON-friendly format [INFO] [stdout] 395 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MEMBER_INACTIVITY_TIMEOUT` is never used [INFO] [stdout] --> src/legion/members.rs:16:7 [INFO] [stdout] | [INFO] [stdout] 16 | const MEMBER_INACTIVITY_TIMEOUT: Duration = Duration::from_secs(7 * 24 * 60 * 60); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_members`, `member_registry`, `permission_policies`, and `invitations` are never read [INFO] [stdout] --> src/legion/members.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct MemberManager { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 21 | /// Channel membership data [INFO] [stdout] 22 | channel_members: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 23 | /// Global member registry [INFO] [stdout] 24 | member_registry: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 25 | /// Permission policies [INFO] [stdout] 26 | permission_policies: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 27 | /// Invitation system [INFO] [stdout] 28 | invitations: RwLock>>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_name`, `owner`, `members`, `created_at`, `settings`, and `pending_invitations` are never read [INFO] [stdout] --> src/legion/members.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 33 | struct ChannelMembership { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 34 | /// Channel name [INFO] [stdout] 35 | channel_name: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 36 | /// Channel owner [INFO] [stdout] 37 | owner: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 38 | /// Channel members with roles [INFO] [stdout] 39 | members: HashMap, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 40 | /// Channel creation time [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Channel settings [INFO] [stdout] 43 | settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 44 | /// Active invitations for this channel [INFO] [stdout] 45 | pending_invitations: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMembership` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `member_id`, `identity`, `channels`, `registered_at`, `last_seen`, and `metadata` are never read [INFO] [stdout] --> src/legion/members.rs:69:5 [INFO] [stdout] | [INFO] [stdout] 67 | struct MemberInfo { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 68 | /// Member ID [INFO] [stdout] 69 | member_id: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 70 | /// Member's current identity [INFO] [stdout] 71 | identity: phalanx_crypto::Identity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 72 | /// Channels this member is in [INFO] [stdout] 73 | channels: HashSet, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 74 | /// Member registration time [INFO] [stdout] 75 | registered_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 76 | /// Last global activity [INFO] [stdout] 77 | last_seen: SystemTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 78 | /// Member metadata [INFO] [stdout] 79 | metadata: HashMap, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/members.rs:274:18 [INFO] [stdout] | [INFO] [stdout] 262 | impl MemberManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 274 | pub async fn register_member(&self, member_id: String, identity: phalanx_crypto::Identity) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 292 | pub async fn create_channel(&self, channel_name: String, owner_id: String, owner_identity: phalanx_crypto::Identity) -> LegionResult<... [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 338 | pub async fn add_channel_member(&self, channel_name: &str, member_id: &str, role: MemberRole) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 380 | pub async fn remove_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 407 | pub async fn can_join_channel(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 441 | pub async fn is_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 451 | pub async fn is_channel_admin(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 465 | pub async fn has_permission(&self, channel_name: &str, member_id: &str, permission: Permission) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 491 | pub async fn set_permission_policy(&self, channel_name: String, mut policy: PermissionPolicy) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 502 | pub async fn create_invitation(&self, channel_name: String, inviter_id: String, invitee_id: String, expires_in: Duration) -> LegionRe... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 531 | pub async fn use_invitation(&self, invitation_id: &str) -> LegionResult<(String, String)> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 553 | pub async fn is_member_registered(&self, member_id: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 559 | pub async fn channel_member_count(&self, channel_name: &str) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 567 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 596 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 616 | pub async fn get_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelStats` is never constructed [INFO] [stdout] --> src/legion/members.rs:628:12 [INFO] [stdout] | [INFO] [stdout] 628 | pub struct ChannelStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_IDLE_TIME` is never used [INFO] [stdout] --> src/legion/session.rs:14:7 [INFO] [stdout] | [INFO] [stdout] 14 | const MAX_IDLE_TIME: Duration = Duration::from_secs(30 * 60); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple fields are never read [INFO] [stdout] --> src/legion/session.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct LegionSession { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 19 | /// Client identifier [INFO] [stdout] 20 | client_id: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 21 | /// Client's identity for encryption [INFO] [stdout] 22 | identity: RwLock, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 23 | /// Legion Protocol session state [INFO] [stdout] 24 | legion_session: RwLock, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 25 | /// Client capabilities [INFO] [stdout] 26 | capabilities: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 27 | /// Session creation time [INFO] [stdout] 28 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 29 | /// Last activity timestamp [INFO] [stdout] 30 | last_activity: RwLock, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 31 | /// Channels this client is in [INFO] [stdout] 32 | joined_channels: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 33 | /// Whether Legion Protocol is fully negotiated [INFO] [stdout] 34 | legion_active: RwLock, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionSession` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/legion/session.rs:39:18 [INFO] [stdout] | [INFO] [stdout] 37 | impl LegionSession { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 38 | /// Create a new Legion session [INFO] [stdout] 39 | pub async fn new(client_id: String, capabilities: Vec) -> LegionResult { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 72 | pub fn supports_legion(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub async fn is_legion_active(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 83 | pub async fn activate_legion(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 101 | pub async fn identity(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn public_key(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | pub async fn update_activity(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 117 | pub fn is_inactive(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 127 | pub fn age(&self) -> Duration { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | pub async fn join_channel(&self, channel_name: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 151 | pub async fn leave_channel(&self, channel_name: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 166 | pub async fn joined_channels(&self) -> HashSet { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 171 | pub async fn is_in_channel(&self, channel_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 176 | pub fn capabilities(&self) -> &HashSet { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 181 | pub fn client_id(&self) -> &str { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub async fn stats(&self) -> SessionStats { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 204 | pub async fn create_handshake(&self, group_id: [u8; 32]) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 223 | pub async fn process_handshake( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SessionStats` is never constructed [INFO] [stdout] --> src/legion/session.rs:234:12 [INFO] [stdout] | [INFO] [stdout] 234 | pub struct SessionStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/session.rs:247:12 [INFO] [stdout] | [INFO] [stdout] 245 | impl SessionStats { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] 246 | /// Convert to JSON-friendly format [INFO] [stdout] 247 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `federated_servers`, `bridge_configs`, and `policies` are never read [INFO] [stdout] --> src/legion/federation.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct FederationManager { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 15 | /// Connected servers [INFO] [stdout] 16 | federated_servers: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 17 | /// Bridge configurations [INFO] [stdout] 18 | bridge_configs: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 19 | /// Federation policies [INFO] [stdout] 20 | policies: RwLock, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `hostname`, `public_key`, `status`, `last_seen`, `capabilities`, and `trust_level` are never read [INFO] [stdout] --> src/legion/federation.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 25 | struct FederatedServer { [INFO] [stdout] | --------------- fields in this struct [INFO] [stdout] 26 | /// Server hostname [INFO] [stdout] 27 | hostname: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 28 | /// Server public key [INFO] [stdout] 29 | public_key: PublicKey, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 30 | /// Connection status [INFO] [stdout] 31 | status: FederationStatus, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 32 | /// Last communication [INFO] [stdout] 33 | last_seen: SystemTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 34 | /// Supported capabilities [INFO] [stdout] 35 | capabilities: Vec, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 36 | /// Trust level [INFO] [stdout] 37 | trust_level: TrustLevel, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederatedServer` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Connected`, `Connecting`, `Disconnected`, and `Error` are never constructed [INFO] [stdout] --> src/legion/federation.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ---------------- variants in this enum [INFO] [stdout] 43 | Connected, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 44 | Connecting, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 45 | Disconnected, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 46 | Error(String), [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/federation.rs:170:18 [INFO] [stdout] | [INFO] [stdout] 159 | impl FederationManager { [INFO] [stdout] | ---------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 170 | pub async fn set_federation_enabled(&self, enabled: bool) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub async fn is_federation_enabled(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 185 | pub async fn add_federated_server(&self, hostname: String, public_key: PublicKey, trust_level: TrustLevel) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 216 | pub async fn remove_federated_server(&self, hostname: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 239 | pub async fn get_server_info(&self, hostname: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 255 | pub async fn list_federated_servers(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 267 | pub async fn configure_bridge(&self, config: BridgeConfig) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 287 | pub async fn remove_bridge(&self, bridge_name: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 336 | pub async fn federation_stats(&self) -> FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FederatedServerInfo` is never constructed [INFO] [stdout] --> src/legion/federation.rs:386:12 [INFO] [stdout] | [INFO] [stdout] 386 | pub struct FederatedServerInfo { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FederationStats` is never constructed [INFO] [stdout] --> src/legion/federation.rs:396:12 [INFO] [stdout] | [INFO] [stdout] 396 | pub struct FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AdvancedChannelManager` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct AdvancedChannelManager { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ManagedChannel` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | struct ManagedChannel { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ServerChannelSettings` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:53:12 [INFO] [stdout] | [INFO] [stdout] 53 | pub struct ServerChannelSettings { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelOperation` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | struct ChannelOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ScheduledOperation` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:89:8 [INFO] [stdout] | [INFO] [stdout] 89 | struct ScheduledOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Priority` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:104:6 [INFO] [stdout] | [INFO] [stdout] 104 | enum Priority { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `RateState` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:113:8 [INFO] [stdout] | [INFO] [stdout] 113 | struct RateState { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ActivityEntry` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:124:8 [INFO] [stdout] | [INFO] [stdout] 124 | struct ActivityEntry { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ActivityType` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:137:6 [INFO] [stdout] | [INFO] [stdout] 137 | enum ActivityType { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ExtendedChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct ExtendedChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelHealth` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `HealthIssue` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:186:10 [INFO] [stdout] | [INFO] [stdout] 186 | pub enum HealthIssue { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PerformanceMetrics` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:201:12 [INFO] [stdout] | [INFO] [stdout] 201 | pub struct PerformanceMetrics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SecurityStatus` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:214:12 [INFO] [stdout] | [INFO] [stdout] 214 | pub struct SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityEvent` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:227:10 [INFO] [stdout] | [INFO] [stdout] 227 | pub enum SecurityEvent { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/legion/channel_manager.rs:254:18 [INFO] [stdout] | [INFO] [stdout] 252 | impl AdvancedChannelManager { [INFO] [stdout] | --------------------------- associated items in this implementation [INFO] [stdout] 253 | /// Create a new advanced channel manager [INFO] [stdout] 254 | pub async fn new(server_settings: ServerChannelSettings) -> LegionResult { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 265 | pub async fn execute_admin_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 344 | async fn create_channel( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 425 | async fn set_channel_topic( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 465 | async fn set_channel_mode( [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 513 | async fn execute_member_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 619 | async fn execute_ban_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 749 | async fn execute_key_operation( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 808 | pub async fn get_extended_channel_info(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 833 | async fn calculate_channel_health(&self, channel: &ManagedChannel) -> ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 873 | async fn assess_security_status(&self, channel: &ManagedChannel) -> SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 886 | async fn log_operation( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 911 | async fn log_activity( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 935 | async fn get_user_role(&self, channel_name: &str, user_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 949 | async fn get_user_permissions(&self, channel_name: &str, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 963 | async fn get_channel_settings(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 973 | pub async fn process_scheduled_operations(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `ProtocolError` is never used [INFO] [stdout] --> src/protocol/mod.rs:36:10 [INFO] [stdout] | [INFO] [stdout] 36 | pub type ProtocolError = IronError; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/protocol/commands.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum Command { [INFO] [stdout] | ------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 16 | Topic { channel: String, topic: Option }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 17 | Names(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 18 | List(Option>), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Who(Option), [INFO] [stdout] | ^^^ [INFO] [stdout] 26 | Whois(Vec), [INFO] [stdout] 27 | Whowas(String, Option), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | Kick { channel: String, user: String, reason: Option }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 32 | Mode { target: String, modes: Option, params: Vec }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | Invite { nick: String, channel: String }, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | Motd(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 37 | Version(Option), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | Stats(Option, Option), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 39 | Time(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 40 | Info(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 45 | Account(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 46 | Monitor { subcommand: String, targets: Vec }, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 47 | Metadata { target: String, subcommand: String, params: Vec }, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 48 | TagMsg { target: String }, [INFO] [stdout] 49 | Batch { reference: String, batch_type: Option, params: Vec }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | Oper { name: String, password: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 59 | Kill { nick: String, reason: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 60 | Rehash, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 61 | Restart, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 62 | Die, [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 65 | CtcpRequest { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 66 | CtcpResponse { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageExtensions` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:5:12 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct MessageExtensions { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TypingState` is never used [INFO] [stdout] --> src/protocol/extensions.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum TypingState { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `from_tags`, and `to_tags` are never used [INFO] [stdout] --> src/protocol/extensions.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl MessageExtensions { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 25 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 39 | pub fn from_tags(tags: &HashMap>) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn to_tags(&self) -> HashMap> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Batch` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:127:12 [INFO] [stdout] | [INFO] [stdout] 127 | pub struct Batch { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_message` are never used [INFO] [stdout] --> src/protocol/extensions.rs:136:12 [INFO] [stdout] | [INFO] [stdout] 135 | impl Batch { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 136 | pub fn new(reference: String, batch_type: String, params: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 146 | pub fn add_message(&mut self, msg: crate::protocol::Message) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityError` is never used [INFO] [stdout] --> src/security/mod.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum SecurityError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `quota` is never read [INFO] [stdout] --> src/security/mod.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 38 | pub struct RateLimiter { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 39 | quota: Quota, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `check_key` is never used [INFO] [stdout] --> src/security/mod.rs:59:18 [INFO] [stdout] | [INFO] [stdout] 43 | impl RateLimiter { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 59 | pub async fn check_key(&self, _key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimiter` is never constructed [INFO] [stdout] --> src/security/mod.rs:64:12 [INFO] [stdout] | [INFO] [stdout] 64 | pub struct ConnectionLimiter { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimits` is never constructed [INFO] [stdout] --> src/security/mod.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct ConnectionLimits { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_and_add`, and `remove` are never used [INFO] [stdout] --> src/security/mod.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 75 | impl ConnectionLimiter { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 76 | pub fn new(max_per_ip: usize, max_global: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 87 | pub fn check_and_add(&self, addr: SocketAddr) -> Result<(), SecurityError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub fn remove(&self, addr: SocketAddr) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FloodProtection` is never constructed [INFO] [stdout] --> src/security/mod.rs:123:12 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct FloodProtection { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_flood`, and `clear` are never used [INFO] [stdout] --> src/security/mod.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 129 | impl FloodProtection { [INFO] [stdout] | -------------------- associated items in this implementation [INFO] [stdout] 130 | pub fn new(max_messages: usize, time_window: Duration) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 138 | pub fn check_flood(&self, connection_id: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 155 | pub fn clear(&self, connection_id: u64) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanManager` is never constructed [INFO] [stdout] --> src/security/mod.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct BanManager { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/security/mod.rs:165:12 [INFO] [stdout] | [INFO] [stdout] 165 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_ban`, `remove_ban`, `is_banned`, and `get_bans` are never used [INFO] [stdout] --> src/security/mod.rs:173:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl BanManager { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 173 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn add_ban(&self, channel: &str, ban: BanEntry) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub fn remove_ban(&self, channel: &str, mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 196 | pub fn is_banned(&self, channel: &str, user_mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn get_bans(&self, channel: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mask_matches` is never used [INFO] [stdout] --> src/security/mod.rs:222:4 [INFO] [stdout] | [INFO] [stdout] 222 | fn mask_matches(pattern: &str, text: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthError` is never used [INFO] [stdout] --> src/security/auth.rs:10:10 [INFO] [stdout] | [INFO] [stdout] 10 | pub enum AuthError { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SaslMechanism` is never used [INFO] [stdout] --> src/security/auth.rs:25:10 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum SaslMechanism { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `from_str` and `as_str` are never used [INFO] [stdout] --> src/security/auth.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 31 | impl SaslMechanism { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 32 | pub fn from_str(s: &str) -> Option { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub fn as_str(&self) -> &'static str { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthMethod` is never used [INFO] [stdout] --> src/security/auth.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | pub enum AuthMethod { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LocalPasswordHasher` is never constructed [INFO] [stdout] --> src/security/auth.rs:62:12 [INFO] [stdout] | [INFO] [stdout] 62 | pub struct LocalPasswordHasher; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `hash_password` and `verify_password` are never used [INFO] [stdout] --> src/security/auth.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 64 | impl LocalPasswordHasher { [INFO] [stdout] | ------------------------ associated functions in this implementation [INFO] [stdout] 65 | pub fn hash_password(password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn verify_password(password: &str, hash: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SaslAuthenticator` is never constructed [INFO] [stdout] --> src/security/auth.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct SaslAuthenticator { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ScramServerState` is never constructed [INFO] [stdout] --> src/security/auth.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 80 | struct ScramServerState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `authenticate_plain`, `start_scram_sha256`, and `verify_scram_sha256` are never used [INFO] [stdout] --> src/security/auth.rs:89:12 [INFO] [stdout] | [INFO] [stdout] 88 | impl SaslAuthenticator { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 89 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 95 | pub fn authenticate_plain(&self, auth_data: &[u8]) -> Result<(String, String), AuthError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn start_scram_sha256(&mut self, client_first: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 152 | pub fn verify_scram_sha256( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate` is never used [INFO] [stdout] --> src/security/auth.rs:193:14 [INFO] [stdout] | [INFO] [stdout] 193 | pub async fn authenticate( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_nonce` is never used [INFO] [stdout] --> src/security/auth.rs:218:4 [INFO] [stdout] | [INFO] [stdout] 218 | fn generate_nonce() -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_salt` is never used [INFO] [stdout] --> src/security/auth.rs:225:4 [INFO] [stdout] | [INFO] [stdout] 225 | fn generate_salt() -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `derive_salted_password` is never used [INFO] [stdout] --> src/security/auth.rs:231:4 [INFO] [stdout] | [INFO] [stdout] 231 | fn derive_salted_password(password: &[u8], salt: &[u8], iterations: u32) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `hmac_sha256` is never used [INFO] [stdout] --> src/security/auth.rs:237:4 [INFO] [stdout] | [INFO] [stdout] 237 | fn hmac_sha256(key: &[u8], data: &[u8]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_tls_acceptor` is never used [INFO] [stdout] --> src/security/tls.rs:4:14 [INFO] [stdout] | [INFO] [stdout] 4 | pub async fn create_tls_acceptor(_cert_path: &Path, _key_path: &Path) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `NICKNAME_REGEX` is never used [INFO] [stdout] --> src/security/validation.rs:4:8 [INFO] [stdout] | [INFO] [stdout] 4 | static NICKNAME_REGEX: Lazy = Lazy::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `VALID_USER_REGEX` is never used [INFO] [stdout] --> src/security/validation.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | static VALID_USER_REGEX: Lazy = Lazy::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_nickname` is never used [INFO] [stdout] --> src/security/validation.rs:16:8 [INFO] [stdout] | [INFO] [stdout] 16 | pub fn validate_nickname(nick: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_username` is never used [INFO] [stdout] --> src/security/validation.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | pub fn validate_username(username: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_realname` is never used [INFO] [stdout] --> src/security/validation.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 40 | pub fn validate_realname(realname: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_message` is never used [INFO] [stdout] --> src/security/validation.rs:49:8 [INFO] [stdout] | [INFO] [stdout] 49 | pub fn validate_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_topic` is never used [INFO] [stdout] --> src/security/validation.rs:58:8 [INFO] [stdout] | [INFO] [stdout] 58 | pub fn validate_topic(topic: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_away_message` is never used [INFO] [stdout] --> src/security/validation.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | pub fn validate_away_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_kick_reason` is never used [INFO] [stdout] --> src/security/validation.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn validate_kick_reason(reason: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_quit_message` is never used [INFO] [stdout] --> src/security/validation.rs:85:8 [INFO] [stdout] | [INFO] [stdout] 85 | pub fn validate_quit_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_channel_key` is never used [INFO] [stdout] --> src/security/validation.rs:94:8 [INFO] [stdout] | [INFO] [stdout] 94 | pub fn validate_channel_key(key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `sanitize_message` is never used [INFO] [stdout] --> src/security/validation.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn sanitize_message(message: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_valid_host_mask` is never used [INFO] [stdout] --> src/security/validation.rs:111:8 [INFO] [stdout] | [INFO] [stdout] 111 | pub fn is_valid_host_mask(mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_legion` and `legion` are never used [INFO] [stdout] --> src/state/mod.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 23 | impl ServerState { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn has_legion(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 57 | pub fn legion(&self) -> Option<&LegionManager> { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `connection_id` and `joined_at` are never read [INFO] [stdout] --> src/state/channel.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct ChannelMember { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 6 | pub connection_id: u64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 7 | pub modes: Vec, [INFO] [stdout] 8 | pub joined_at: DateTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMember` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `created_at` are never read [INFO] [stdout] --> src/state/channel.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct Channel { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 13 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Channel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `id`, `addr`, and `created_at` are never read [INFO] [stdout] --> src/state/connection.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct Connection { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 9 | pub id: u64, [INFO] [stdout] | ^^ [INFO] [stdout] 10 | pub addr: SocketAddr, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 17 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Connection` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mask_ip` is never used [INFO] [stdout] --> src/utils/mod.rs:13:8 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn mask_ip(ip: IpAddr) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `parse_mode_string` is never used [INFO] [stdout] --> src/utils/mod.rs:34:8 [INFO] [stdout] | [INFO] [stdout] 34 | pub fn parse_mode_string(modes: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils/mod.rs:56:8 [INFO] [stdout] | [INFO] [stdout] 56 | pub fn format_duration(seconds: u64) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_channel_name` is never used [INFO] [stdout] --> src/utils/mod.rs:77:8 [INFO] [stdout] | [INFO] [stdout] 77 | pub fn normalize_channel_name(name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_nickname` is never used [INFO] [stdout] --> src/utils/mod.rs:81:8 [INFO] [stdout] | [INFO] [stdout] 81 | pub fn normalize_nickname(nick: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_with_defaults` is never used [INFO] [stdout] --> src/utils/config.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 148 | impl ServerConfig { [INFO] [stdout] | ----------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn load_with_defaults(path: Option>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 33s [INFO] running `Command { std: "docker" "inspect" "97c469b99cf6b851a88bdc1bf8a702629f3cc23296da6ac7733a161060aa7744", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "97c469b99cf6b851a88bdc1bf8a702629f3cc23296da6ac7733a161060aa7744", kill_on_drop: false }` [INFO] [stdout] 97c469b99cf6b851a88bdc1bf8a702629f3cc23296da6ac7733a161060aa7744 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 958514a1de09566044b11733d9b1ff98050609f6ee516577a699f3702fbaf35f [INFO] running `Command { std: "docker" "start" "-a" "958514a1de09566044b11733d9b1ff98050609f6ee516577a699f3702fbaf35f", kill_on_drop: false }` [INFO] [stderr] Compiling bitflags v2.9.1 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling chrono v0.4.41 [INFO] [stderr] Compiling rustix v1.0.8 [INFO] [stderr] Compiling atoi v2.0.0 [INFO] [stderr] Compiling clap_lex v0.7.5 [INFO] [stderr] Compiling fastrand v2.3.0 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling ciborium v0.2.2 [INFO] [stderr] Compiling mockall_derive v0.13.1 [INFO] [stderr] Compiling plotters v0.3.7 [INFO] [stderr] Compiling predicates v3.1.3 [INFO] [stderr] Compiling rand_xorshift v0.4.0 [INFO] [stderr] Compiling raw-cpuid v11.5.0 [INFO] [stderr] Compiling clap_builder v4.5.42 [INFO] [stderr] Compiling itertools v0.10.5 [INFO] [stderr] Compiling rayon v1.10.0 [INFO] [stderr] Compiling ron v0.8.1 [INFO] [stderr] Compiling tinytemplate v1.2.1 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling is-terminal v0.4.16 [INFO] [stderr] Compiling config v0.14.1 [INFO] [stderr] Compiling criterion-plot v0.5.0 [INFO] [stderr] Compiling sqlx-core v0.8.6 [INFO] [stderr] Compiling legion-protocol v0.1.0 [INFO] [stderr] Compiling tempfile v3.20.0 [INFO] [stderr] Compiling quanta v0.12.6 [INFO] [stderr] Compiling rusty-fork v0.3.0 [INFO] [stderr] Compiling governor v0.8.1 [INFO] [stderr] Compiling proptest v1.7.0 [INFO] [stderr] Compiling mockall v0.13.1 [INFO] [stderr] Compiling clap v4.5.42 [INFO] [stderr] Compiling criterion v0.5.1 [INFO] [stderr] Compiling sqlx-postgres v0.8.6 [INFO] [stderr] Compiling sqlx-sqlite v0.8.6 [INFO] [stderr] Compiling sqlx-macros-core v0.8.6 [INFO] [stderr] Compiling sqlx-macros v0.8.6 [INFO] [stderr] Compiling sqlx v0.8.6 [INFO] [stderr] Compiling legion-server v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `bytes::BytesMut` [INFO] [stdout] --> src/actors/connection.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | use bytes::BytesMut; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `timeout` [INFO] [stdout] --> src/actors/connection.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | use tokio::time::{interval, timeout}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `trace` and `warn` [INFO] [stdout] --> src/actors/connection.rs:13:35 [INFO] [stdout] | [INFO] [stdout] 13 | use tracing::{debug, error, info, warn, trace}; [INFO] [stdout] | ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/actors/channel.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `warn` [INFO] [stdout] --> src/actors/channel.rs:6:28 [INFO] [stdout] | [INFO] [stdout] 6 | use tracing::{debug, info, warn}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ChannelMember` [INFO] [stdout] --> src/actors/channel.rs:9:29 [INFO] [stdout] | [INFO] [stdout] 9 | use crate::state::{Channel, ChannelMember, ServerState}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `self::channel::ChannelActor` [INFO] [stdout] --> src/actors/mod.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 6 | pub use self::channel::ChannelActor; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `info` [INFO] [stdout] --> src/commands/mod.rs:4:22 [INFO] [stdout] | [INFO] [stdout] 4 | use tracing::{debug, info}; [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/notice.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/who_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/topic_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/mode_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/kick_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/list.rs:3:32 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Message` and `Reply` [INFO] [stdout] --> src/commands/handlers/list_test.rs:3:23 [INFO] [stdout] | [INFO] [stdout] 3 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Reply` [INFO] [stdout] --> src/commands/handlers/nick.rs:4:32 [INFO] [stdout] | [INFO] [stdout] 4 | use crate::protocol::{Message, Reply}; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `HistoryItem` and `MessageType` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:5:22 [INFO] [stdout] | [INFO] [stdout] 5 | use crate::history::{HistoryItem, HistoryQuery, QueryResult, MessageType}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `StandardReply` [INFO] [stdout] --> src/commands/handlers/chathistory.rs:6:41 [INFO] [stdout] | [INFO] [stdout] 6 | use crate::commands::standard_replies::{StandardReply, common}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around block return value [INFO] [stdout] --> src/commands/handlers/query.rs:17:13 [INFO] [stdout] | [INFO] [stdout] 17 | (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 17 - (conn.nickname.clone().unwrap_or_else(|| "*".to_string())) [INFO] [stdout] 17 + conn.nickname.clone().unwrap_or_else(|| "*".to_string()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `VecDeque` [INFO] [stdout] --> src/history/mod.rs:2:34 [INFO] [stdout] | [INFO] [stdout] 2 | use std::collections::{BTreeMap, VecDeque}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::sync::RwLock` [INFO] [stdout] --> src/history/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::sync::RwLock; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `format_timestamp` [INFO] [stdout] --> src/history/storage.rs:1:39 [INFO] [stdout] | [INFO] [stdout] 1 | use super::{HistoryItem, MessageType, format_timestamp}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `HistoryConfig` [INFO] [stdout] --> src/history/mod.rs:10:35 [INFO] [stdout] | [INFO] [stdout] 10 | pub use storage::{HistoryStorage, HistoryConfig}; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `is_legion_encrypted_channel` [INFO] [stdout] --> src/legion/channels.rs:6:30 [INFO] [stdout] | [INFO] [stdout] 6 | use legion_protocol::utils::{is_legion_encrypted_channel, ChannelType, get_channel_type}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/keys.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, protocol::KeyRotationMessage}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Identity` and `protocol::KeyRotationMessage` [INFO] [stdout] --> src/legion/keys.rs:412:26 [INFO] [stdout] | [INFO] [stdout] 412 | use phalanx_crypto::{Identity, protocol::KeyRotationMessage}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Identity` [INFO] [stdout] --> src/legion/federation.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PublicKey` [INFO] [stdout] --> src/legion/channel_manager.rs:9:32 [INFO] [stdout] | [INFO] [stdout] 9 | use phalanx_crypto::{Identity, PublicKey}; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `debug`, `error`, and `warn` [INFO] [stdout] --> src/legion/channel_manager.rs:14:15 [INFO] [stdout] | [INFO] [stdout] 14 | use tracing::{debug, info, warn, error}; [INFO] [stdout] | ^^^^^ ^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `IronSession` and `IronVersion` [INFO] [stdout] --> src/legion/mod.rs:14:23 [INFO] [stdout] | [INFO] [stdout] 14 | use legion_protocol::{IronSession, IronVersion, Capability}; [INFO] [stdout] | ^^^^^^^^^^^ ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `PhalanxGroup` [INFO] [stdout] --> src/legion/mod.rs:15:32 [INFO] [stdout] | [INFO] [stdout] 15 | use phalanx_crypto::{Identity, PhalanxGroup, AsyncPhalanxGroup}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Command as ProtocolCommand` [INFO] [stdout] --> src/protocol/mod.rs:2:35 [INFO] [stdout] | [INFO] [stdout] 2 | use legion_protocol::{IrcMessage, Command as ProtocolCommand, IronError}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/protocol/mod.rs:3:5 [INFO] [stdout] | [INFO] [stdout] 3 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `thiserror::Error` [INFO] [stdout] --> src/protocol/mod.rs:4:5 [INFO] [stdout] | [INFO] [stdout] 4 | use thiserror::Error; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Buf` [INFO] [stdout] --> src/protocol/codec.rs:1:13 [INFO] [stdout] | [INFO] [stdout] 1 | use bytes::{Buf, BufMut, BytesMut}; [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::str::FromStr` [INFO] [stdout] --> src/protocol/commands.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::str::FromStr; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `CapabilityHandler`, `CapabilitySet`, `Capability`, `constants`, and `utils` [INFO] [stdout] --> src/protocol/mod.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | Capability, CapabilitySet, CapabilityHandler, [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 24 | constants, utils, Reply [INFO] [stdout] | ^^^^^^^^^ ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `SaslAuth` and `SaslMechanism` [INFO] [stdout] --> src/protocol/mod.rs:27:33 [INFO] [stdout] | [INFO] [stdout] 27 | pub use legion_protocol::sasl::{SaslAuth, SaslMechanism}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `legion_protocol::bleeding_edge` [INFO] [stdout] --> src/protocol/mod.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | pub use legion_protocol::bleeding_edge; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Argon2` and `PasswordHash` [INFO] [stdout] --> src/security/auth.rs:1:14 [INFO] [stdout] | [INFO] [stdout] 1 | use argon2::{Argon2, PasswordHash}; [INFO] [stdout] | ^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `PasswordHasher as ArgonPasswordHasher`, `SaltString`, and `rand_core::OsRng` [INFO] [stdout] --> src/security/auth.rs:2:29 [INFO] [stdout] | [INFO] [stdout] 2 | use argon2::password_hash::{rand_core::OsRng, SaltString, PasswordHasher as ArgonPasswordHasher}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `AuthMethod`, `SaslMechanism`, and `authenticate` [INFO] [stdout] --> src/security/mod.rs:14:22 [INFO] [stdout] | [INFO] [stdout] 14 | pub use self::auth::{AuthMethod, SaslMechanism, authenticate}; [INFO] [stdout] | ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `validate_message` and `validate_nickname` [INFO] [stdout] --> src/security/mod.rs:15:28 [INFO] [stdout] | [INFO] [stdout] 15 | pub use self::validation::{validate_nickname, validate_channel_name, validate_message}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:45:70 [INFO] [stdout] | [INFO] [stdout] 45 | matches!(cap, Capability::LegionProtocolV1 | Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:52:58 [INFO] [stdout] | [INFO] [stdout] 52 | } else if capabilities.contains(&Capability::IronProtocolV1) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated unit variant `legion_protocol::Capability::IronProtocolV1`: Use LegionProtocolV1 instead [INFO] [stdout] --> src/legion/session.rs:74:49 [INFO] [stdout] | [INFO] [stdout] 74 | self.capabilities.contains(&Capability::IronProtocolV1) [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:49:17 [INFO] [stdout] | [INFO] [stdout] 49 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:128:17 [INFO] [stdout] | [INFO] [stdout] 128 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `cap_version` [INFO] [stdout] --> src/actors/connection.rs:183:21 [INFO] [stdout] | [INFO] [stdout] 183 | let cap_version = if !params.is_empty() { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_cap_version` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:244:33 [INFO] [stdout] | [INFO] [stdout] 244 | ... let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:299:17 [INFO] [stdout] | [INFO] [stdout] 299 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/actors/connection.rs:349:17 [INFO] [stdout] | [INFO] [stdout] 349 | let mut state = self.server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/join.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 14 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/part.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:16 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/privmsg.rs:15:22 [INFO] [stdout] | [INFO] [stdout] 15 | let (nick, user, host, has_echo_message, msg_id, privmsg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:16 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_user` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `host` [INFO] [stdout] --> src/commands/handlers/notice.rs:21:22 [INFO] [stdout] | [INFO] [stdout] 21 | let (nick, user, host, has_echo_message, msg_id, notice_msg) = { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_host` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member_nick` [INFO] [stdout] --> src/commands/handlers/who.rs:37:37 [INFO] [stdout] | [INFO] [stdout] 37 | if let Some(member_nick) = &member_conn.nickname { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_member_nick` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `target_conn` [INFO] [stdout] --> src/commands/handlers/who.rs:66:25 [INFO] [stdout] | [INFO] [stdout] 66 | if let Some(target_conn) = state.connections.get(&target_id) { [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_conn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/who_test.rs:21:9 [INFO] [stdout] | [INFO] [stdout] 21 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic.rs:20:9 [INFO] [stdout] | [INFO] [stdout] 20 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic_test.rs:19:9 [INFO] [stdout] | [INFO] [stdout] 19 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | let mut mode_args = mode_params[1..].to_vec(); [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode_test.rs:21:9 [INFO] [stdout] | [INFO] [stdout] 21 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/mode_test.rs:49:9 [INFO] [stdout] | [INFO] [stdout] 49 | let mut channel = Channel::new("#test".to_string()); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick_test.rs:22:13 [INFO] [stdout] | [INFO] [stdout] 22 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:19:9 [INFO] [stdout] | [INFO] [stdout] 19 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | let mut empty_channel = Channel::new("#empty".to_string()); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 60 | let mut no_topic_channel = Channel::new("#notopic".to_string()); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/nick.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | let mut state = server_state.write().await; [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `policy` [INFO] [stdout] --> src/legion/keys.rs:259:17 [INFO] [stdout] | [INFO] [stdout] 259 | let policy = drop(keys); [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_policy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/keys.rs:339:18 [INFO] [stdout] | [INFO] [stdout] 339 | for (channel, channel_keys) in keys.iter_mut() { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:298:84 [INFO] [stdout] | [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `message` [INFO] [stdout] --> src/legion/federation.rs:319:87 [INFO] [stdout] | [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_message` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `cleaned_servers` is never read [INFO] [stdout] --> src/legion/federation.rs:361:17 [INFO] [stdout] | [INFO] [stdout] 361 | let mut cleaned_servers = 0; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `member` [INFO] [stdout] --> src/legion/channel_manager.rs:525:33 [INFO] [stdout] | [INFO] [stdout] 525 | if let Some(member) = channel.members.remove(target_user) { [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_member` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `operator_identity` [INFO] [stdout] --> src/legion/channel_manager.rs:753:9 [INFO] [stdout] | [INFO] [stdout] 753 | operator_identity: &Identity, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_operator_identity` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `channel` [INFO] [stdout] --> src/legion/mod.rs:229:13 [INFO] [stdout] | [INFO] [stdout] 229 | let channel = self.channels.get(&channel_name) [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_channel` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/who_test.rs:271:13 [INFO] [stdout] | [INFO] [stdout] 271 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `user_id` [INFO] [stdout] --> src/commands/handlers/topic_test.rs:124:17 [INFO] [stdout] | [INFO] [stdout] 124 | let (state, user_id, member_id) = setup_test_state().await; [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_user_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/topic_test.rs:180:13 [INFO] [stdout] | [INFO] [stdout] 180 | let mut channel = state_guard.channels.get_mut("#test").unwrap(); [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/kick_test.rs:126:17 [INFO] [stdout] | [INFO] [stdout] 126 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/commands/handlers/list_test.rs:343:13 [INFO] [stdout] | [INFO] [stdout] 343 | let mut state_guard = state.write().await; [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `members::ChannelSettings` is more private than the item `members::ChannelStats::settings` [INFO] [stdout] --> src/legion/members.rs:635:5 [INFO] [stdout] | [INFO] [stdout] 635 | pub settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `members::ChannelStats::settings` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `members::ChannelSettings` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/members.rs:145:1 [INFO] [stdout] | [INFO] [stdout] 145 | struct ChannelSettings { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(private_interfaces)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `federation::TrustLevel` is more private than the item `federation::FederationManager::add_federated_server` [INFO] [stdout] --> src/legion/federation.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 185 | pub async fn add_federated_server(&self, hostname: String, public_key: PublicKey, trust_level: TrustLevel) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `federation::FederationManager::add_federated_server` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `federation::TrustLevel` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:51:1 [INFO] [stdout] | [INFO] [stdout] 51 | enum TrustLevel { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `FederationStatus` is more private than the item `federation::FederationManager::update_server_status` [INFO] [stdout] --> src/legion/federation.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `federation::FederationManager::update_server_status` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `FederationStatus` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/federation.rs:42:1 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `ActivityEntry` is more private than the item `ExtendedChannelInfo::recent_activity` [INFO] [stdout] --> src/legion/channel_manager.rs:166:5 [INFO] [stdout] | [INFO] [stdout] 166 | pub recent_activity: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ field `ExtendedChannelInfo::recent_activity` is reachable at visibility `pub(crate)` [INFO] [stdout] | [INFO] [stdout] note: but type `ActivityEntry` is only usable at visibility `pub(self)` [INFO] [stdout] --> src/legion/channel_manager.rs:124:1 [INFO] [stdout] | [INFO] [stdout] 124 | struct ActivityEntry { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PING_TIMEOUT` is never used [INFO] [stdout] --> src/actors/connection.rs:20:7 [INFO] [stdout] | [INFO] [stdout] 20 | const PING_TIMEOUT: Duration = Duration::from_secs(60); [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/connection.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 23 | pub struct ConnectionActor { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/channel.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ChannelActor { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] ... [INFO] [stdout] 16 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Invite` is never constructed [INFO] [stdout] --> src/actors/channel.rs:47:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub enum ChannelMessage { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 47 | Invite { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tx` is never read [INFO] [stdout] --> src/actors/server.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct ServerActor { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 15 | tx: mpsc::Sender, [INFO] [stdout] | ^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `ConnectionCommand`, `CreateChannel`, `RemoveChannel`, `BroadcastMessage`, and `ServerNotice` are never constructed [INFO] [stdout] --> src/actors/server.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 19 | pub enum ServerMessage { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 20 | ConnectionCommand { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 24 | CreateChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | RemoveChannel { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | BroadcastMessage { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 35 | ServerNotice { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CommandProcessor` is never constructed [INFO] [stdout] --> src/commands/mod.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct CommandProcessor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `process` are never used [INFO] [stdout] --> src/commands/mod.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 16 | impl CommandProcessor { [INFO] [stdout] | --------------------- associated items in this implementation [INFO] [stdout] 17 | pub fn new(server_state: Arc>) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | pub async fn process( [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_notice` is never used [INFO] [stdout] --> src/commands/handlers/notice.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn handle_notice( [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_oper` is never used [INFO] [stdout] --> src/commands/handlers/oper.rs:6:14 [INFO] [stdout] | [INFO] [stdout] 6 | pub async fn handle_oper( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `handle_nick` is never used [INFO] [stdout] --> src/commands/handlers/nick.rs:9:14 [INFO] [stdout] | [INFO] [stdout] 9 | pub async fn handle_nick( [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Warn` and `Note` are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 8 | pub enum StandardReplyType { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 12 | Warn, [INFO] [stdout] | ^^^^ [INFO] [stdout] 13 | /// NOTE - Provides informational messages [INFO] [stdout] 14 | Note, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/commands/standard_replies.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 29 | pub enum StandardReplyCode { [INFO] [stdout] | ----------------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 32 | AccountRequiredToConnect, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 38 | NeedMoreParams, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 39 | /// Message could not be retrieved [INFO] [stdout] 40 | MessageError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 41 | /// Unknown error occurred [INFO] [stdout] 42 | UnknownError, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | CannotSendToChan, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | NotOnChannel, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 51 | /// Channel is invite-only [INFO] [stdout] 52 | InviteOnlyChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 53 | /// Channel key required [INFO] [stdout] 54 | BadChannelKey, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 55 | /// Channel is full [INFO] [stdout] 56 | ChannelIsFull, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 57 | /// Banned from channel [INFO] [stdout] 58 | BannedFromChan, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 62 | NoSuchNick, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 63 | /// Nickname in use [INFO] [stdout] 64 | NicknameInUse, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 65 | /// Invalid nickname [INFO] [stdout] 66 | InvalidNickname, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | SaslFail, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 71 | /// Invalid credentials provided [INFO] [stdout] 72 | InvalidCredentials, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 73 | /// Registration failed [INFO] [stdout] 74 | RegFail, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 75 | /// Account registration callback invalid [INFO] [stdout] 76 | RegInvalidCallback, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 77 | /// Account already registered [INFO] [stdout] 78 | AlreadyRegistered, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 82 | UnknownCommand, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 83 | /// Command disabled [INFO] [stdout] 84 | CommandDisabled, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | RateLimitExceeded, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 89 | /// Resource limit exceeded [INFO] [stdout] 90 | ResourceLimit, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 93 | Custom(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `StandardReplyCode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `warn`, `note`, and `with_context` are never used [INFO] [stdout] --> src/commands/standard_replies.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 144 | impl StandardReply { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn warn(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 168 | pub fn note(command: &str, code: StandardReplyCode, description: &str) -> Self { [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn with_context(mut self, context: Vec) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:225:12 [INFO] [stdout] | [INFO] [stdout] 225 | pub fn no_such_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `no_such_nick` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:231:12 [INFO] [stdout] | [INFO] [stdout] 231 | pub fn no_such_nick(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `not_on_channel` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:237:12 [INFO] [stdout] | [INFO] [stdout] 237 | pub fn not_on_channel(command: &str, channel: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `cannot_send_to_chan` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:243:12 [INFO] [stdout] | [INFO] [stdout] 243 | pub fn cannot_send_to_chan(command: &str, channel: &str, reason: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `nickname_in_use` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:249:12 [INFO] [stdout] | [INFO] [stdout] 249 | pub fn nickname_in_use(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `invalid_nickname` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:255:12 [INFO] [stdout] | [INFO] [stdout] 255 | pub fn invalid_nickname(command: &str, nick: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `unknown_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub fn unknown_command(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `rate_limit_exceeded` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:267:12 [INFO] [stdout] | [INFO] [stdout] 267 | pub fn rate_limit_exceeded(command: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `deprecated_command` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:272:12 [INFO] [stdout] | [INFO] [stdout] 272 | pub fn deprecated_command(command: &str, alternative: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `info_note` is never used [INFO] [stdout] --> src/commands/standard_replies.rs:278:12 [INFO] [stdout] | [INFO] [stdout] 278 | pub fn info_note(command: &str, message: &str) -> StandardReply { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `DatabaseError` is never used [INFO] [stdout] --> src/db/mod.rs:12:10 [INFO] [stdout] | [INFO] [stdout] 12 | pub enum DatabaseError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Database` is never used [INFO] [stdout] --> src/db/mod.rs:30:10 [INFO] [stdout] | [INFO] [stdout] 30 | pub enum Database { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple associated items are never used [INFO] [stdout] --> src/db/mod.rs:36:18 [INFO] [stdout] | [INFO] [stdout] 35 | impl Database { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 36 | pub async fn connect_postgres(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub async fn connect_sqlite(url: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub async fn run_migrations(&self) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub async fn create_user(&self, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 56 | pub async fn get_user_by_nickname(&self, nickname: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn get_user_by_id(&self, id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 64 | pub async fn update_user(&self, user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 68 | pub async fn authenticate_user(&self, nickname: &str, password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 73 | pub async fn create_channel(&self, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 77 | pub async fn get_channel(&self, name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 81 | pub async fn update_channel(&self, channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 85 | pub async fn delete_channel(&self, name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub async fn list_channels(&self) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 94 | pub async fn add_channel_member(&self, member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | pub async fn remove_channel_member(&self, channel: &str, user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 102 | pub async fn get_channel_members(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn get_user_channels(&self, user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 111 | pub async fn add_ban(&self, ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub async fn remove_ban(&self, channel: &str, mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 119 | pub async fn get_channel_bans(&self, channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 123 | pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 128 | pub async fn get_server_config(&self) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | pub async fn update_server_config(&self, config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `User` is never constructed [INFO] [stdout] --> src/db/models.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct User { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl User { [INFO] [stdout] | --------- associated function in this implementation [INFO] [stdout] 25 | pub fn new(nickname: String, username: String, realname: String, password_hash: String) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Channel` is never constructed [INFO] [stdout] --> src/db/models.rs:47:12 [INFO] [stdout] | [INFO] [stdout] 47 | pub struct Channel { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/db/models.rs:66:12 [INFO] [stdout] | [INFO] [stdout] 65 | impl Channel { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 66 | pub fn new(name: String, founder: Option) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelMember` is never constructed [INFO] [stdout] --> src/db/models.rs:88:12 [INFO] [stdout] | [INFO] [stdout] 88 | pub struct ChannelMember { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/db/models.rs:97:12 [INFO] [stdout] | [INFO] [stdout] 97 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ServerConfig` is never constructed [INFO] [stdout] --> src/db/models.rs:107:12 [INFO] [stdout] | [INFO] [stdout] 107 | pub struct ServerConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageLog` is never constructed [INFO] [stdout] --> src/db/models.rs:164:12 [INFO] [stdout] | [INFO] [stdout] 164 | pub struct MessageLog { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OperatorCredential` is never constructed [INFO] [stdout] --> src/db/models.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct OperatorCredential { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_user(_db: &Database, user: &User) -> Result { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_nickname` is never used [INFO] [stdout] --> src/db/queries/users.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_user_by_nickname( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_by_id` is never used [INFO] [stdout] --> src/db/queries/users.rs:16:14 [INFO] [stdout] | [INFO] [stdout] 16 | pub async fn get_user_by_id(_db: &Database, _id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:21:14 [INFO] [stdout] | [INFO] [stdout] 21 | pub async fn update_user(_db: &Database, _user: &User) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate_user` is never used [INFO] [stdout] --> src/db/queries/users.rs:26:14 [INFO] [stdout] | [INFO] [stdout] 26 | pub async fn authenticate_user( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn create_channel(_db: &Database, channel: &Channel) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn get_channel(_db: &Database, _name: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn update_channel(_db: &Database, _channel: &Channel) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `delete_channel` is never used [INFO] [stdout] --> src/db/queries/channels.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn delete_channel(_db: &Database, _name: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `list_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:23:14 [INFO] [stdout] | [INFO] [stdout] 23 | pub async fn list_channels(_db: &Database) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:28:14 [INFO] [stdout] | [INFO] [stdout] 28 | pub async fn add_channel_member(_db: &Database, _member: &ChannelMember) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_channel_member` is never used [INFO] [stdout] --> src/db/queries/channels.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | pub async fn remove_channel_member(_db: &Database, _channel: &str, _user_id: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_members` is never used [INFO] [stdout] --> src/db/queries/channels.rs:38:14 [INFO] [stdout] | [INFO] [stdout] 38 | pub async fn get_channel_members(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_user_channels` is never used [INFO] [stdout] --> src/db/queries/channels.rs:43:14 [INFO] [stdout] | [INFO] [stdout] 43 | pub async fn get_user_channels(_db: &Database, _user_id: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn add_ban(_db: &Database, _ban: &BanEntry) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_ban` is never used [INFO] [stdout] --> src/db/queries/bans.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn remove_ban(_db: &Database, _channel: &str, _mask: &str) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_channel_bans` is never used [INFO] [stdout] --> src/db/queries/bans.rs:13:14 [INFO] [stdout] | [INFO] [stdout] 13 | pub async fn get_channel_bans(_db: &Database, _channel: &str) -> Result, DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_banned` is never used [INFO] [stdout] --> src/db/queries/bans.rs:18:14 [INFO] [stdout] | [INFO] [stdout] 18 | pub async fn is_banned(_db: &Database, _channel: &str, _user_mask: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:3:14 [INFO] [stdout] | [INFO] [stdout] 3 | pub async fn get_server_config(_db: &Database) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_server_config` is never used [INFO] [stdout] --> src/db/queries/config.rs:8:14 [INFO] [stdout] | [INFO] [stdout] 8 | pub async fn update_server_config(_db: &Database, _config: &ServerConfig) -> Result<(), DatabaseError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_schema_sql` is never used [INFO] [stdout] --> src/db/migrations.rs:3:8 [INFO] [stdout] | [INFO] [stdout] 3 | pub fn create_schema_sql() -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Config` is never constructed [INFO] [stdout] --> src/error.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub enum CenturionError { [INFO] [stdout] | -------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 22 | Config(String), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `CenturionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_msgid` and `timestamp_secs` are never used [INFO] [stdout] --> src/history/mod.rs:81:12 [INFO] [stdout] | [INFO] [stdout] 56 | impl HistoryItem { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 81 | pub fn has_msgid(&self, msgid: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 86 | pub fn timestamp_secs(&self) -> u64 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `cleanup_old_messages` is never used [INFO] [stdout] --> src/history/storage.rs:286:12 [INFO] [stdout] | [INFO] [stdout] 195 | impl HistoryStorage { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 286 | pub fn cleanup_old_messages(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `is_empty` is never used [INFO] [stdout] --> src/history/queries.rs:33:12 [INFO] [stdout] | [INFO] [stdout] 11 | impl HistorySelector { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 33 | pub fn is_empty(&self) -> bool { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `start` and `end` are never read [INFO] [stdout] --> src/history/queries.rs:74:9 [INFO] [stdout] | [INFO] [stdout] 73 | Targets { [INFO] [stdout] | ------- fields in this variant [INFO] [stdout] 74 | start: Option, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 75 | end: Option, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `HistoryQuery` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Key` is never constructed [INFO] [stdout] --> src/legion/mod.rs:44:5 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum LegionError { [INFO] [stdout] | ----------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 44 | Key(String), [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `server_identity`, `channels`, `sessions`, `key_manager`, `member_manager`, and `federation_manager` are never read [INFO] [stdout] --> src/legion/mod.rs:63:5 [INFO] [stdout] | [INFO] [stdout] 61 | pub struct LegionManager { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 62 | /// Server identity for Legion operations [INFO] [stdout] 63 | server_identity: Arc>, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] 64 | /// Active Legion channels [INFO] [stdout] 65 | channels: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 66 | /// Client sessions with Legion capabilities [INFO] [stdout] 67 | sessions: Arc>, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 68 | /// Key manager for rotation and storage [INFO] [stdout] 69 | key_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 70 | /// Member manager for authentication and authorization [INFO] [stdout] 71 | member_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 72 | /// Federation manager for cross-server communication [INFO] [stdout] 73 | federation_manager: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/mod.rs:95:18 [INFO] [stdout] | [INFO] [stdout] 76 | impl LegionManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 95 | pub async fn server_identity(&self) -> Identity { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 100 | pub async fn supports_legion(&self, client_id: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | pub async fn create_session(&self, client_id: String, capabilities: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 116 | pub async fn remove_session(&self, client_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 122 | pub async fn create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 160 | pub async fn join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 200 | pub async fn leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 222 | pub async fn send_message( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 246 | pub async fn receive_message( [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 277 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 285 | pub async fn list_channels(&self) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 290 | pub async fn rotate_channel_keys(&self, channel_name: String, admin_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 312 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `ChannelOperation` is never used [INFO] [stdout] --> src/legion/channels.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 13 | pub enum ChannelOperation { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelEvent` is never constructed [INFO] [stdout] --> src/legion/channels.rs:29:12 [INFO] [stdout] | [INFO] [stdout] 29 | pub struct ChannelEvent { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/channels.rs:60:18 [INFO] [stdout] | [INFO] [stdout] 39 | impl LegionManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 60 | pub async fn handle_create_channel(&self, channel_name: String, creator_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 88 | pub async fn handle_join_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 114 | pub async fn handle_leave_channel(&self, channel_name: String, client_id: String) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 135 | pub async fn handle_send_message(&self, channel_name: String, sender_id: String, message: String) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 164 | pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec) -> LegionResult LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 201 | pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 231 | pub async fn list_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 252 | async fn log_channel_event(&self, event: ChannelEvent) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channels.rs:261:12 [INFO] [stdout] | [INFO] [stdout] 261 | pub struct ChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelSummary` is never constructed [INFO] [stdout] --> src/legion/channels.rs:271:12 [INFO] [stdout] | [INFO] [stdout] 271 | pub struct ChannelSummary { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MAX_OLD_KEYS` is never used [INFO] [stdout] --> src/legion/keys.rs:18:7 [INFO] [stdout] | [INFO] [stdout] 18 | const MAX_OLD_KEYS: usize = 10; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `kdf_context` and `backup_handler` are never read [INFO] [stdout] --> src/legion/keys.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 22 | pub struct KeyManager { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | kdf_context: Vec, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 29 | /// Backup storage handler [INFO] [stdout] 30 | backup_handler: Option>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `KeyManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `current_rotation`, `old_rotations`, `created_at`, `last_rotation`, and `next_rotation` are never read [INFO] [stdout] --> src/legion/keys.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 35 | struct ChannelKeys { [INFO] [stdout] | ----------- fields in this struct [INFO] [stdout] 36 | /// Current active key rotation info [INFO] [stdout] 37 | current_rotation: KeyRotationInfo, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 38 | /// Previous keys for backward compatibility [INFO] [stdout] 39 | old_rotations: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 40 | /// Channel creation timestamp [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Last rotation timestamp [INFO] [stdout] 43 | last_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 44 | /// Next scheduled rotation [INFO] [stdout] 45 | next_rotation: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelKeys` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `store_backup`, `retrieve_backup`, `list_backups`, and `cleanup_backups` are never used [INFO] [stdout] --> src/legion/keys.rs:106:14 [INFO] [stdout] | [INFO] [stdout] 104 | pub trait BackupHandler: Send + Sync + std::fmt::Debug { [INFO] [stdout] | ------------- methods in this trait [INFO] [stdout] 105 | /// Store a key rotation backup [INFO] [stdout] 106 | async fn store_backup(&self, channel: &str, rotation: &KeyRotationInfo) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 109 | async fn retrieve_backup(&self, channel: &str, sequence: u64) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 112 | async fn list_backups(&self, channel: &str) -> LegionResult>; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | async fn cleanup_backups(&self, channel: &str, keep_count: usize) -> LegionResult<()>; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/keys.rs:146:18 [INFO] [stdout] | [INFO] [stdout] 130 | impl KeyManager { [INFO] [stdout] | --------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 146 | pub async fn set_backup_handler(&mut self, handler: Box) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 166 | pub async fn store_key_rotation(&self, channel: &str, rotation_msg: &KeyRotationMessage) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 215 | pub async fn get_current_rotation(&self, channel: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 247 | pub async fn needs_rotation(&self, channel: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 275 | pub async fn schedule_rotation(&self, channel: &str, when: SystemTime) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 288 | pub async fn on_member_change(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 302 | pub async fn channel_stats(&self, channel: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 332 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 365 | fn compute_key_fingerprint(&self, rotation_msg: &KeyRotationMessage) -> [u8; 32] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelKeyStats` is never constructed [INFO] [stdout] --> src/legion/keys.rs:382:12 [INFO] [stdout] | [INFO] [stdout] 382 | pub struct ChannelKeyStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/keys.rs:395:12 [INFO] [stdout] | [INFO] [stdout] 393 | impl ChannelKeyStats { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] 394 | /// Convert to JSON-friendly format [INFO] [stdout] 395 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MEMBER_INACTIVITY_TIMEOUT` is never used [INFO] [stdout] --> src/legion/members.rs:16:7 [INFO] [stdout] | [INFO] [stdout] 16 | const MEMBER_INACTIVITY_TIMEOUT: Duration = Duration::from_secs(7 * 24 * 60 * 60); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `invitations` is never read [INFO] [stdout] --> src/legion/members.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct MemberManager { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 28 | invitations: RwLock>>, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `channel_name`, `owner`, `created_at`, `settings`, and `pending_invitations` are never read [INFO] [stdout] --> src/legion/members.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 33 | struct ChannelMembership { [INFO] [stdout] | ----------------- fields in this struct [INFO] [stdout] 34 | /// Channel name [INFO] [stdout] 35 | channel_name: String, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 36 | /// Channel owner [INFO] [stdout] 37 | owner: String, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 42 | /// Channel settings [INFO] [stdout] 43 | settings: ChannelSettings, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 44 | /// Active invitations for this channel [INFO] [stdout] 45 | pending_invitations: HashSet, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMembership` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `member_id`, `identity`, `registered_at`, `last_seen`, and `metadata` are never read [INFO] [stdout] --> src/legion/members.rs:69:5 [INFO] [stdout] | [INFO] [stdout] 67 | struct MemberInfo { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 68 | /// Member ID [INFO] [stdout] 69 | member_id: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 70 | /// Member's current identity [INFO] [stdout] 71 | identity: phalanx_crypto::Identity, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 75 | registered_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 76 | /// Last global activity [INFO] [stdout] 77 | last_seen: SystemTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 78 | /// Member metadata [INFO] [stdout] 79 | metadata: HashMap, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MemberInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/members.rs:338:18 [INFO] [stdout] | [INFO] [stdout] 262 | impl MemberManager { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 338 | pub async fn add_channel_member(&self, channel_name: &str, member_id: &str, role: MemberRole) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 380 | pub async fn remove_channel_member(&self, channel_name: &str, member_id: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 407 | pub async fn can_join_channel(&self, channel_name: &str, member_id: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 502 | pub async fn create_invitation(&self, channel_name: String, inviter_id: String, invitee_id: String, expires_in: Duration) -> LegionRe... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 531 | pub async fn use_invitation(&self, invitation_id: &str) -> LegionResult<(String, String)> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 567 | pub async fn channel_stats(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 596 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 616 | pub async fn get_user_channels(&self, user_id: &str) -> LegionResult> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelStats` is never constructed [INFO] [stdout] --> src/legion/members.rs:628:12 [INFO] [stdout] | [INFO] [stdout] 628 | pub struct ChannelStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `identity` and `created_at` are never read [INFO] [stdout] --> src/legion/session.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 18 | pub struct LegionSession { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 22 | identity: RwLock, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 28 | created_at: SystemTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `LegionSession` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/session.rs:101:18 [INFO] [stdout] | [INFO] [stdout] 37 | impl LegionSession { [INFO] [stdout] | ------------------ methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 101 | pub async fn identity(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 106 | pub async fn public_key(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 127 | pub fn age(&self) -> Duration { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 176 | pub fn capabilities(&self) -> &HashSet { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub async fn stats(&self) -> SessionStats { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 204 | pub async fn create_handshake(&self, group_id: [u8; 32]) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 223 | pub async fn process_handshake( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SessionStats` is never constructed [INFO] [stdout] --> src/legion/session.rs:234:12 [INFO] [stdout] | [INFO] [stdout] 234 | pub struct SessionStats { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `to_json` is never used [INFO] [stdout] --> src/legion/session.rs:247:12 [INFO] [stdout] | [INFO] [stdout] 245 | impl SessionStats { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] 246 | /// Convert to JSON-friendly format [INFO] [stdout] 247 | pub fn to_json(&self) -> serde_json::Value { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `bridge_configs` is never read [INFO] [stdout] --> src/legion/federation.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 14 | pub struct FederationManager { [INFO] [stdout] | ----------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 18 | bridge_configs: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationManager` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `public_key` is never read [INFO] [stdout] --> src/legion/federation.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 25 | struct FederatedServer { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 29 | public_key: PublicKey, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederatedServer` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Connected`, `Disconnected`, and `Error` are never constructed [INFO] [stdout] --> src/legion/federation.rs:43:5 [INFO] [stdout] | [INFO] [stdout] 42 | enum FederationStatus { [INFO] [stdout] | ---------------- variants in this enum [INFO] [stdout] 43 | Connected, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 44 | Connecting, [INFO] [stdout] 45 | Disconnected, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 46 | Error(String), [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `FederationStatus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple methods are never used [INFO] [stdout] --> src/legion/federation.rs:227:18 [INFO] [stdout] | [INFO] [stdout] 159 | impl FederationManager { [INFO] [stdout] | ---------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 227 | pub async fn update_server_status(&self, hostname: &str, status: FederationStatus) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 267 | pub async fn configure_bridge(&self, config: BridgeConfig) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 287 | pub async fn remove_bridge(&self, bridge_name: &str) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 298 | pub async fn send_federated_message(&self, target_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 336 | pub async fn federation_stats(&self) -> FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 360 | pub async fn cleanup(&self) -> LegionResult<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FederationStats` is never constructed [INFO] [stdout] --> src/legion/federation.rs:396:12 [INFO] [stdout] | [INFO] [stdout] 396 | pub struct FederationStats { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `scheduled_operations` is never read [INFO] [stdout] --> src/legion/channel_manager.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 17 | pub struct AdvancedChannelManager { [INFO] [stdout] | ---------------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 27 | scheduled_operations: RwLock>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `stats` and `rate_limits` are never read [INFO] [stdout] --> src/legion/channel_manager.rs:42:5 [INFO] [stdout] | [INFO] [stdout] 32 | struct ManagedChannel { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 42 | stats: ChannelStats, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | rate_limits: HashMap, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ManagedChannel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `message_count`, `window_start`, and `burst_remaining` are never read [INFO] [stdout] --> src/legion/channel_manager.rs:115:5 [INFO] [stdout] | [INFO] [stdout] 113 | struct RateState { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 114 | /// Message count in current window [INFO] [stdout] 115 | message_count: u32, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 116 | /// Current window start time [INFO] [stdout] 117 | window_start: SystemTime, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 118 | /// Burst allowance remaining [INFO] [stdout] 119 | burst_remaining: u32, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `RateState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ExtendedChannelInfo` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct ExtendedChannelInfo { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ChannelHealth` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:175:12 [INFO] [stdout] | [INFO] [stdout] 175 | pub struct ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `HealthIssue` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:186:10 [INFO] [stdout] | [INFO] [stdout] 186 | pub enum HealthIssue { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PerformanceMetrics` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:201:12 [INFO] [stdout] | [INFO] [stdout] 201 | pub struct PerformanceMetrics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SecurityStatus` is never constructed [INFO] [stdout] --> src/legion/channel_manager.rs:214:12 [INFO] [stdout] | [INFO] [stdout] 214 | pub struct SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityEvent` is never used [INFO] [stdout] --> src/legion/channel_manager.rs:227:10 [INFO] [stdout] | [INFO] [stdout] 227 | pub enum SecurityEvent { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_extended_channel_info`, `calculate_channel_health`, `assess_security_status`, and `process_scheduled_operations` are never used [INFO] [stdout] --> src/legion/channel_manager.rs:808:18 [INFO] [stdout] | [INFO] [stdout] 252 | impl AdvancedChannelManager { [INFO] [stdout] | --------------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 808 | pub async fn get_extended_channel_info(&self, channel_name: &str) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 833 | async fn calculate_channel_health(&self, channel: &ManagedChannel) -> ChannelHealth { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 873 | async fn assess_security_status(&self, channel: &ManagedChannel) -> SecurityStatus { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 973 | pub async fn process_scheduled_operations(&self) -> LegionResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `ProtocolError` is never used [INFO] [stdout] --> src/protocol/mod.rs:36:10 [INFO] [stdout] | [INFO] [stdout] 36 | pub type ProtocolError = IronError; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/protocol/commands.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum Command { [INFO] [stdout] | ------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 16 | Topic { channel: String, topic: Option }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 17 | Names(Vec), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 18 | List(Option>), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 25 | Who(Option), [INFO] [stdout] | ^^^ [INFO] [stdout] 26 | Whois(Vec), [INFO] [stdout] 27 | Whowas(String, Option), [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 31 | Kick { channel: String, user: String, reason: Option }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 32 | Mode { target: String, modes: Option, params: Vec }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 33 | Invite { nick: String, channel: String }, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | Motd(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 37 | Version(Option), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 38 | Stats(Option, Option), [INFO] [stdout] | ^^^^^ [INFO] [stdout] 39 | Time(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] 40 | Info(Option), [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 45 | Account(String), [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 46 | Monitor { subcommand: String, targets: Vec }, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 47 | Metadata { target: String, subcommand: String, params: Vec }, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 48 | TagMsg { target: String }, [INFO] [stdout] 49 | Batch { reference: String, batch_type: Option, params: Vec }, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | Oper { name: String, password: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 59 | Kill { nick: String, reason: String }, [INFO] [stdout] | ^^^^ [INFO] [stdout] 60 | Rehash, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 61 | Restart, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 62 | Die, [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 65 | CtcpRequest { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] 66 | CtcpResponse { target: String, command: String, params: String }, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Command` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MessageExtensions` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:5:12 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct MessageExtensions { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `TypingState` is never used [INFO] [stdout] --> src/protocol/extensions.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum TypingState { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `from_tags`, and `to_tags` are never used [INFO] [stdout] --> src/protocol/extensions.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl MessageExtensions { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 25 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 39 | pub fn from_tags(tags: &HashMap>) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 74 | pub fn to_tags(&self) -> HashMap> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Batch` is never constructed [INFO] [stdout] --> src/protocol/extensions.rs:127:12 [INFO] [stdout] | [INFO] [stdout] 127 | pub struct Batch { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `add_message` are never used [INFO] [stdout] --> src/protocol/extensions.rs:136:12 [INFO] [stdout] | [INFO] [stdout] 135 | impl Batch { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 136 | pub fn new(reference: String, batch_type: String, params: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 146 | pub fn add_message(&mut self, msg: crate::protocol::Message) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SecurityError` is never used [INFO] [stdout] --> src/security/mod.rs:18:10 [INFO] [stdout] | [INFO] [stdout] 18 | pub enum SecurityError { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `quota` is never read [INFO] [stdout] --> src/security/mod.rs:39:5 [INFO] [stdout] | [INFO] [stdout] 38 | pub struct RateLimiter { [INFO] [stdout] | ----------- field in this struct [INFO] [stdout] 39 | quota: Quota, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `check_key` is never used [INFO] [stdout] --> src/security/mod.rs:59:18 [INFO] [stdout] | [INFO] [stdout] 43 | impl RateLimiter { [INFO] [stdout] | ---------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 59 | pub async fn check_key(&self, _key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimiter` is never constructed [INFO] [stdout] --> src/security/mod.rs:64:12 [INFO] [stdout] | [INFO] [stdout] 64 | pub struct ConnectionLimiter { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ConnectionLimits` is never constructed [INFO] [stdout] --> src/security/mod.rs:68:8 [INFO] [stdout] | [INFO] [stdout] 68 | struct ConnectionLimits { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_and_add`, and `remove` are never used [INFO] [stdout] --> src/security/mod.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 75 | impl ConnectionLimiter { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 76 | pub fn new(max_per_ip: usize, max_global: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 87 | pub fn check_and_add(&self, addr: SocketAddr) -> Result<(), SecurityError> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub fn remove(&self, addr: SocketAddr) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `FloodProtection` is never constructed [INFO] [stdout] --> src/security/mod.rs:123:12 [INFO] [stdout] | [INFO] [stdout] 123 | pub struct FloodProtection { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `check_flood`, and `clear` are never used [INFO] [stdout] --> src/security/mod.rs:130:12 [INFO] [stdout] | [INFO] [stdout] 129 | impl FloodProtection { [INFO] [stdout] | -------------------- associated items in this implementation [INFO] [stdout] 130 | pub fn new(max_messages: usize, time_window: Duration) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 138 | pub fn check_flood(&self, connection_id: u64) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 155 | pub fn clear(&self, connection_id: u64) { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanManager` is never constructed [INFO] [stdout] --> src/security/mod.rs:160:12 [INFO] [stdout] | [INFO] [stdout] 160 | pub struct BanManager { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BanEntry` is never constructed [INFO] [stdout] --> src/security/mod.rs:165:12 [INFO] [stdout] | [INFO] [stdout] 165 | pub struct BanEntry { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_ban`, `remove_ban`, `is_banned`, and `get_bans` are never used [INFO] [stdout] --> src/security/mod.rs:173:12 [INFO] [stdout] | [INFO] [stdout] 172 | impl BanManager { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 173 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 179 | pub fn add_ban(&self, channel: &str, ban: BanEntry) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 186 | pub fn remove_ban(&self, channel: &str, mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 196 | pub fn is_banned(&self, channel: &str, user_mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 214 | pub fn get_bans(&self, channel: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mask_matches` is never used [INFO] [stdout] --> src/security/mod.rs:222:4 [INFO] [stdout] | [INFO] [stdout] 222 | fn mask_matches(pattern: &str, text: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthError` is never used [INFO] [stdout] --> src/security/auth.rs:10:10 [INFO] [stdout] | [INFO] [stdout] 10 | pub enum AuthError { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SaslMechanism` is never used [INFO] [stdout] --> src/security/auth.rs:25:10 [INFO] [stdout] | [INFO] [stdout] 25 | pub enum SaslMechanism { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `from_str` and `as_str` are never used [INFO] [stdout] --> src/security/auth.rs:32:12 [INFO] [stdout] | [INFO] [stdout] 31 | impl SaslMechanism { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 32 | pub fn from_str(s: &str) -> Option { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 41 | pub fn as_str(&self) -> &'static str { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `AuthMethod` is never used [INFO] [stdout] --> src/security/auth.rs:51:10 [INFO] [stdout] | [INFO] [stdout] 51 | pub enum AuthMethod { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LocalPasswordHasher` is never constructed [INFO] [stdout] --> src/security/auth.rs:62:12 [INFO] [stdout] | [INFO] [stdout] 62 | pub struct LocalPasswordHasher; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated functions `hash_password` and `verify_password` are never used [INFO] [stdout] --> src/security/auth.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 64 | impl LocalPasswordHasher { [INFO] [stdout] | ------------------------ associated functions in this implementation [INFO] [stdout] 65 | pub fn hash_password(password: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn verify_password(password: &str, hash: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SaslAuthenticator` is never constructed [INFO] [stdout] --> src/security/auth.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 76 | pub struct SaslAuthenticator { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ScramServerState` is never constructed [INFO] [stdout] --> src/security/auth.rs:80:8 [INFO] [stdout] | [INFO] [stdout] 80 | struct ScramServerState { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `authenticate_plain`, `start_scram_sha256`, and `verify_scram_sha256` are never used [INFO] [stdout] --> src/security/auth.rs:89:12 [INFO] [stdout] | [INFO] [stdout] 88 | impl SaslAuthenticator { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 89 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 95 | pub fn authenticate_plain(&self, auth_data: &[u8]) -> Result<(String, String), AuthError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn start_scram_sha256(&mut self, client_first: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 152 | pub fn verify_scram_sha256( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `authenticate` is never used [INFO] [stdout] --> src/security/auth.rs:193:14 [INFO] [stdout] | [INFO] [stdout] 193 | pub async fn authenticate( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_nonce` is never used [INFO] [stdout] --> src/security/auth.rs:218:4 [INFO] [stdout] | [INFO] [stdout] 218 | fn generate_nonce() -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `generate_salt` is never used [INFO] [stdout] --> src/security/auth.rs:225:4 [INFO] [stdout] | [INFO] [stdout] 225 | fn generate_salt() -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `derive_salted_password` is never used [INFO] [stdout] --> src/security/auth.rs:231:4 [INFO] [stdout] | [INFO] [stdout] 231 | fn derive_salted_password(password: &[u8], salt: &[u8], iterations: u32) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `hmac_sha256` is never used [INFO] [stdout] --> src/security/auth.rs:237:4 [INFO] [stdout] | [INFO] [stdout] 237 | fn hmac_sha256(key: &[u8], data: &[u8]) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_tls_acceptor` is never used [INFO] [stdout] --> src/security/tls.rs:4:14 [INFO] [stdout] | [INFO] [stdout] 4 | pub async fn create_tls_acceptor(_cert_path: &Path, _key_path: &Path) -> io::Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `VALID_USER_REGEX` is never used [INFO] [stdout] --> src/security/validation.rs:12:8 [INFO] [stdout] | [INFO] [stdout] 12 | static VALID_USER_REGEX: Lazy = Lazy::new(|| { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_username` is never used [INFO] [stdout] --> src/security/validation.rs:32:8 [INFO] [stdout] | [INFO] [stdout] 32 | pub fn validate_username(username: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_realname` is never used [INFO] [stdout] --> src/security/validation.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 40 | pub fn validate_realname(realname: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_topic` is never used [INFO] [stdout] --> src/security/validation.rs:58:8 [INFO] [stdout] | [INFO] [stdout] 58 | pub fn validate_topic(topic: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_away_message` is never used [INFO] [stdout] --> src/security/validation.rs:67:8 [INFO] [stdout] | [INFO] [stdout] 67 | pub fn validate_away_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_kick_reason` is never used [INFO] [stdout] --> src/security/validation.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn validate_kick_reason(reason: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_quit_message` is never used [INFO] [stdout] --> src/security/validation.rs:85:8 [INFO] [stdout] | [INFO] [stdout] 85 | pub fn validate_quit_message(message: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `validate_channel_key` is never used [INFO] [stdout] --> src/security/validation.rs:94:8 [INFO] [stdout] | [INFO] [stdout] 94 | pub fn validate_channel_key(key: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `sanitize_message` is never used [INFO] [stdout] --> src/security/validation.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn sanitize_message(message: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_valid_host_mask` is never used [INFO] [stdout] --> src/security/validation.rs:111:8 [INFO] [stdout] | [INFO] [stdout] 111 | pub fn is_valid_host_mask(mask: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `has_legion` and `legion` are never used [INFO] [stdout] --> src/state/mod.rs:52:12 [INFO] [stdout] | [INFO] [stdout] 23 | impl ServerState { [INFO] [stdout] | ---------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn has_legion(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 57 | pub fn legion(&self) -> Option<&LegionManager> { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `connection_id` and `joined_at` are never read [INFO] [stdout] --> src/state/channel.rs:6:9 [INFO] [stdout] | [INFO] [stdout] 5 | pub struct ChannelMember { [INFO] [stdout] | ------------- fields in this struct [INFO] [stdout] 6 | pub connection_id: u64, [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] 7 | pub modes: Vec, [INFO] [stdout] 8 | pub joined_at: DateTime, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ChannelMember` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `name` and `created_at` are never read [INFO] [stdout] --> src/state/channel.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct Channel { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 13 | pub name: String, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 19 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Channel` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `id`, `addr`, and `created_at` are never read [INFO] [stdout] --> src/state/connection.rs:9:9 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct Connection { [INFO] [stdout] | ---------- fields in this struct [INFO] [stdout] 9 | pub id: u64, [INFO] [stdout] | ^^ [INFO] [stdout] 10 | pub addr: SocketAddr, [INFO] [stdout] | ^^^^ [INFO] [stdout] ... [INFO] [stdout] 17 | pub created_at: DateTime, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Connection` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `mask_ip` is never used [INFO] [stdout] --> src/utils/mod.rs:13:8 [INFO] [stdout] | [INFO] [stdout] 13 | pub fn mask_ip(ip: IpAddr) -> String { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `parse_mode_string` is never used [INFO] [stdout] --> src/utils/mod.rs:34:8 [INFO] [stdout] | [INFO] [stdout] 34 | pub fn parse_mode_string(modes: &str) -> (Vec, Vec) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `format_duration` is never used [INFO] [stdout] --> src/utils/mod.rs:56:8 [INFO] [stdout] | [INFO] [stdout] 56 | pub fn format_duration(seconds: u64) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_channel_name` is never used [INFO] [stdout] --> src/utils/mod.rs:77:8 [INFO] [stdout] | [INFO] [stdout] 77 | pub fn normalize_channel_name(name: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `normalize_nickname` is never used [INFO] [stdout] --> src/utils/mod.rs:81:8 [INFO] [stdout] | [INFO] [stdout] 81 | pub fn normalize_nickname(nick: &str) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `load_with_defaults` is never used [INFO] [stdout] --> src/utils/config.rs:157:12 [INFO] [stdout] | [INFO] [stdout] 148 | impl ServerConfig { [INFO] [stdout] | ----------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn load_with_defaults(path: Option>) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 48.32s [INFO] running `Command { std: "docker" "inspect" "958514a1de09566044b11733d9b1ff98050609f6ee516577a699f3702fbaf35f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "958514a1de09566044b11733d9b1ff98050609f6ee516577a699f3702fbaf35f", kill_on_drop: false }` [INFO] [stdout] 958514a1de09566044b11733d9b1ff98050609f6ee516577a699f3702fbaf35f [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+b83b707f97d809763b7861afa7638871f3339a33" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 09e6ece1f54dc6cae763bfd78947bfdf9dd0723f1566b3556f0a37d59f4da821 [INFO] running `Command { std: "docker" "start" "-a" "09e6ece1f54dc6cae763bfd78947bfdf9dd0723f1566b3556f0a37d59f4da821", 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] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_policy` [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) -> 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) -> 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, [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, [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, [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, [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>) -> 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) -> 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 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 41 | pub async fn connect_sqlite(url: &str) -> Result { [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 { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 56 | pub async fn get_user_by_nickname(&self, nickname: &str) -> Result, DatabaseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 60 | pub async fn get_user_by_id(&self, id: &str) -> Result, 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 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 73 | pub async fn create_channel(&self, channel: &Channel) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 77 | pub async fn get_channel(&self, name: &str) -> Result, 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, 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, DatabaseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 106 | pub async fn get_user_channels(&self, user_id: &str) -> Result, 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, DatabaseError> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 123 | pub async fn is_banned(&self, channel: &str, user_mask: &str) -> Result { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 128 | pub async fn get_server_config(&self) -> Result { [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) -> 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 { [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, 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 { [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, 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, 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, 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, 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, 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 { [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 { [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, [INFO] [stderr] | ^^^^^ [INFO] [stderr] 75 | end: Option, [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>, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] 64 | /// Active Legion channels [INFO] [stderr] 65 | channels: Arc>, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] 66 | /// Client sessions with Legion capabilities [INFO] [stderr] 67 | sessions: Arc>, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] 68 | /// Key manager for rotation and storage [INFO] [stderr] 69 | key_manager: Arc, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] 70 | /// Member manager for authentication and authorization [INFO] [stderr] 71 | member_manager: Arc, [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] 72 | /// Federation manager for cross-server communication [INFO] [stderr] 73 | federation_manager: Arc, [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) -> 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 { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 285 | pub async fn list_channels(&self) -> Vec { [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> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 164 | pub async fn handle_receive_message(&self, channel_name: String, recipient_id: String, encrypted_data: Vec) -> LegionResult LegionResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 201 | pub async fn get_channel_info(&self, channel_name: &str, requester_id: &str) -> LegionResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 231 | pub async fn list_user_channels(&self, user_id: &str) -> LegionResult> { [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, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] 29 | /// Backup storage handler [INFO] [stderr] 30 | backup_handler: Option>, [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, [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] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 109 | async fn retrieve_backup(&self, channel: &str, sequence: u64) -> LegionResult>; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 112 | async fn list_backups(&self, channel: &str) -> LegionResult>; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] ... [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) { [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> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 221 | pub async fn get_rotation_by_sequence(&self, channel: &str, sequence: u64) -> LegionResult> { [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 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 302 | pub async fn channel_stats(&self, channel: &str) -> LegionResult { [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] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [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] [stderr] 16 | const MEMBER_INACTIVITY_TIMEOUT: Duration = Duration::from_secs(7 * 24 * 60 * 60); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field `invitations` is never read [INFO] [stderr] --> src/legion/members.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 20 | pub struct MemberManager { [INFO] [stderr] | ------------- field in this struct [INFO] [stderr] ... [INFO] [stderr] 28 | invitations: RwLock>>, [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, [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, [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 { [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 { [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> { [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, [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 { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 106 | pub async fn public_key(&self) -> LegionResult { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 127 | pub fn age(&self) -> Duration { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 176 | pub fn capabilities(&self) -> &HashSet { [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 { [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>, [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] [stderr] | [INFO] [stderr] 25 | struct FederatedServer { [INFO] [stderr] | --------------- field in this struct [INFO] [stderr] ... [INFO] [stderr] 29 | public_key: PublicKey, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `FederatedServer` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stderr] [INFO] [stderr] warning: variants `Connected`, `Disconnected`, and `Error` are never constructed [INFO] [stderr] --> src/legion/federation.rs:43:5 [INFO] [stderr] | [INFO] [stderr] 42 | enum FederationStatus { [INFO] [stderr] | ---------------- variants in this enum [INFO] [stderr] 43 | Connected, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] 44 | Connecting, [INFO] [stderr] 45 | Disconnected, [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] 46 | Error(String), [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `FederationStatus` 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/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) -> LegionResult<()> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 319 | pub async fn process_federated_message(&self, source_server: &str, channel: &str, message: Vec) -> 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>, [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, [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 { [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 { [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 }, [INFO] [stderr] | ^^^^^ [INFO] [stderr] 17 | Names(Vec), [INFO] [stderr] | ^^^^^ [INFO] [stderr] 18 | List(Option>), [INFO] [stderr] | ^^^^ [INFO] [stderr] ... [INFO] [stderr] 25 | Who(Option), [INFO] [stderr] | ^^^ [INFO] [stderr] 26 | Whois(Vec), [INFO] [stderr] 27 | Whowas(String, Option), [INFO] [stderr] | ^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 31 | Kick { channel: String, user: String, reason: Option }, [INFO] [stderr] | ^^^^ [INFO] [stderr] 32 | Mode { target: String, modes: Option, params: Vec }, [INFO] [stderr] | ^^^^ [INFO] [stderr] 33 | Invite { nick: String, channel: String }, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 36 | Motd(Option), [INFO] [stderr] | ^^^^ [INFO] [stderr] 37 | Version(Option), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] 38 | Stats(Option, Option), [INFO] [stderr] | ^^^^^ [INFO] [stderr] 39 | Time(Option), [INFO] [stderr] | ^^^^ [INFO] [stderr] 40 | Info(Option), [INFO] [stderr] | ^^^^ [INFO] [stderr] ... [INFO] [stderr] 45 | Account(String), [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] 46 | Monitor { subcommand: String, targets: Vec }, [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] 47 | Metadata { target: String, subcommand: String, params: Vec }, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] 48 | TagMsg { target: String }, [INFO] [stderr] 49 | Batch { reference: String, batch_type: Option, params: Vec }, [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>) -> Self { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 74 | pub fn to_tags(&self) -> HashMap> { [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) -> 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 { [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 { [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 { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 70 | pub fn verify_password(password: &str, hash: &str) -> Result { [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 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 152 | pub fn verify_scram_sha256( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `authenticate` is never used [INFO] [stderr] --> src/security/auth.rs:193:14 [INFO] [stderr] | [INFO] [stderr] 193 | pub async fn authenticate( [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `generate_nonce` is never used [INFO] [stderr] --> src/security/auth.rs:218:4 [INFO] [stderr] | [INFO] [stderr] 218 | fn generate_nonce() -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `generate_salt` is never used [INFO] [stderr] --> src/security/auth.rs:225:4 [INFO] [stderr] | [INFO] [stderr] 225 | fn generate_salt() -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `derive_salted_password` is never used [INFO] [stderr] --> src/security/auth.rs:231:4 [INFO] [stderr] | [INFO] [stderr] 231 | fn derive_salted_password(password: &[u8], salt: &[u8], iterations: u32) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `hmac_sha256` is never used [INFO] [stderr] --> src/security/auth.rs:237:4 [INFO] [stderr] | [INFO] [stderr] 237 | fn hmac_sha256(key: &[u8], data: &[u8]) -> Vec { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `create_tls_acceptor` is never used [INFO] [stderr] --> src/security/tls.rs:4:14 [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 = 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, [INFO] [stderr] 8 | pub joined_at: DateTime, [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, [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, [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, Vec) { [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>) -> Result { [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 66 suggestions) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.36s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/legion_server-f1c82663ad0f87b8) [INFO] [stdout] [INFO] [stdout] running 80 tests [INFO] [stdout] test commands::handlers::kick::tests::test_kick_not_in_channel ... ok [INFO] [stdout] test commands::handlers::kick::tests::test_kick_removes_target_from_channel ... ok [INFO] [stdout] test commands::handlers::kick::tests::test_kick_nonexistent_channel ... ok [INFO] [stdout] test commands::handlers::kick::tests::test_kick_without_reason ... ok [INFO] [stdout] test commands::handlers::kick::tests::test_kick_insufficient_params ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_all_channels ... ok [INFO] [stdout] test commands::handlers::kick::tests::test_kick_success ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_all_excludes_hidden_channels ... ok [INFO] [stdout] test commands::handlers::kick::tests::test_kick_not_operator ... ok [INFO] [stdout] test commands::handlers::kick::tests::test_kick_target_not_in_channel ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_invalid_connection ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_channel_with_no_topic ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_empty_channel ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_mixed_channel_visibility ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_multiple_channels ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_nonexistent_channel ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_private_channel_as_member ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_requester_without_nickname ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_private_channel_not_member ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_secret_channel_as_member ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_secret_channel_not_member ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_op_to_unknown_nick ... ok [INFO] [stdout] test commands::handlers::list::tests::test_list_specific_channel ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_voice ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_operator ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_non_member_denied ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_no_target ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_grant_op_to_non_member ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_need_more_params ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_query_channel ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_non_operator_denied ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_remove_key ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_channel_key ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_remove_limit ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_remove_operator ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_channel_limit ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_unknown_channel ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_multiple_modes ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_set_topic_protection ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_clear ... ok [INFO] [stdout] test commands::handlers::mode::tests::test_mode_user_mode_not_implemented ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_get_existing ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_nonexistent_channel ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_operator_restricted_mode ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_restricted_mode ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_not_in_channel ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_no_params ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_get_no_topic ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_case_insensitive_nick ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_channel_member ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_invalid_connection ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_channel_not_member ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_no_params ... ok [INFO] [stdout] test commands::handlers::topic::tests::test_topic_set_success ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_private_channel_not_member ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_requester_without_nickname ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_channel_variations ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_secret_channel_not_member ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_specific_user_exists ... ok [INFO] [stdout] test commands::standard_replies::tests::test_common_replies ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_specific_user_not_exists ... ok [INFO] [stdout] test commands::handlers::who::tests::test_who_wildcard ... ok [INFO] [stdout] test commands::standard_replies::tests::test_standard_reply_creation ... ok [INFO] [stdout] test legion::channels::tests::test_channel_name_validation ... ok [INFO] [stdout] test legion::federation::tests::test_federation_enable_disable ... ok [INFO] [stdout] test legion::federation::tests::test_federation_manager_creation ... ok [INFO] [stdout] test legion::keys::tests::test_key_manager_creation ... ok [INFO] [stdout] test legion::federation::tests::test_federated_server_management ... ok [INFO] [stdout] test legion::keys::tests::test_rotation_policy ... ok [INFO] [stdout] test legion::session::tests::test_session_creation ... ok [INFO] [stdout] test legion::members::tests::test_channel_creation_and_membership ... ok [INFO] [stdout] test legion::members::tests::test_permissions ... ok [INFO] [stdout] test security::validation::tests::test_validate_message ... ok [INFO] [stdout] test legion::members::tests::test_member_manager_creation ... ok [INFO] [stdout] test legion::session::tests::test_channel_management ... ok [INFO] [stdout] test security::validation::tests::test_validate_nickname ... ok [INFO] [stdout] test security::validation::tests::test_validate_channel_name ... ok [INFO] [stdout] test legion::channel_manager::tests::test_topic_setting ... FAILED [INFO] [stdout] test legion::session::tests::test_legion_activation ... FAILED [INFO] [stdout] test legion::channel_manager::tests::test_channel_creation ... FAILED [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] [INFO] [stdout] ---- legion::channel_manager::tests::test_topic_setting stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'legion::channel_manager::tests::test_topic_setting' (89) 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: 0x625c1f2cdd52 - std::backtrace_rs::backtrace::libunwind::trace::h589a96ef7638b383 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x625c1f2cdd52 - std::backtrace_rs::backtrace::trace_unsynchronized::h23a30a7548c40de4 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x625c1f2cdd52 - std::sys::backtrace::_print_fmt::h87dabd6535c8c07a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:66:9 [INFO] [stdout] 3: 0x625c1f2cdd52 - ::fmt::hffd20ad4e5eca8ab [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:39:26 [INFO] [stdout] 4: 0x625c1f2e078f - core::fmt::rt::Argument::fmt::h75c83e3fd5ce2419 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/fmt/rt.rs:173:76 [INFO] [stdout] 5: 0x625c1f2e078f - core::fmt::write::h6d9d3a7cfd7b84f5 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/fmt/mod.rs:1468:25 [INFO] [stdout] 6: 0x625c1f29aed3 - std::io::default_write_fmt::he11a713685e2464d [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x625c1f29aed3 - std::io::Write::write_fmt::h9d08f7e050bd2612 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/io/mod.rs:1954:13 [INFO] [stdout] 8: 0x625c1f2a6e52 - std::sys::backtrace::BacktraceLock::print::hb28797143397220e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:42:9 [INFO] [stdout] 9: 0x625c1f2abb2f - std::panicking::default_hook::{{closure}}::h7555113b62983743 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:301:27 [INFO] [stdout] 10: 0x625c1f2ab9c1 - std::panicking::default_hook::h2714b564abe8d914 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:325:9 [INFO] [stdout] 11: 0x625c1ee7193e - as core::ops::function::Fn>::call::h0e9de8cceb22406e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1999:9 [INFO] [stdout] 12: 0x625c1ee7193e - test::test_main_with_exit_callback::{{closure}}::h8125bd66cf4739d0 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x625c1f2ac27e - as core::ops::function::Fn>::call::h1fd0a0802eaec16b [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1999:9 [INFO] [stdout] 14: 0x625c1f2ac27e - std::panicking::panic_with_hook::h190dc82263685ec5 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:842:13 [INFO] [stdout] 15: 0x625c1f2abf9a - std::panicking::panic_handler::{{closure}}::h8b036a1b366643ac [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:707:13 [INFO] [stdout] 16: 0x625c1f2a6f89 - std::sys::backtrace::__rust_end_short_backtrace::h45affcfc0c830da8 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:174:18 [INFO] [stdout] 17: 0x625c1f28f0dd - __rustc[9b67c8562bba447b]::rust_begin_unwind [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:698:5 [INFO] [stdout] 18: 0x625c1f2e9650 - core::panicking::panic_fmt::hc084f85b1e76c16d [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panicking.rs:75:14 [INFO] [stdout] 19: 0x625c1f2e8606 - core::result::unwrap_failed::hf926a4254073b4aa [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/result.rs:1852:5 [INFO] [stdout] 20: 0x625c1edf82d9 - core::result::Result::unwrap::h5c44ad36f157a7a6 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/result.rs:1223:23 [INFO] [stdout] 21: 0x625c1edf82d9 - legion_server::legion::channel_manager::tests::test_topic_setting::{{closure}}::h21ee5f2abb7b957a [INFO] [stdout] at /opt/rustwide/workdir/src/legion/channel_manager.rs:1045:17 [INFO] [stdout] 22: 0x625c1ee0acd2 - as core::future::future::Future>::poll::hdcf33a50a56d9177 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/future/future.rs:133:9 [INFO] [stdout] 23: 0x625c1ee0ac4d - as core::future::future::Future>::poll::h47f711c78cd17f64 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/future/future.rs:133:9 [INFO] [stdout] 24: 0x625c1ee08f3d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::ha5189f506de6b742 [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: 0x625c1ee08e4b - tokio::task::coop::with_budget::hd087d30f45ac7d3f [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: 0x625c1ee08e4b - tokio::task::coop::budget::h14d9951f02f00cd0 [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: 0x625c1ee08e4b - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::he500369c0fdd259b [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: 0x625c1ee065d0 - tokio::runtime::scheduler::current_thread::Context::enter::hebc3da59c3f688cf [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: 0x625c1ee078dd - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h1de49ee3a6a1b922 [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: 0x625c1ee07584 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::h3922cc2fce58efe1 [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: 0x625c1eddeccb - tokio::runtime::context::scoped::Scoped::set::hbb50d518af7977e1 [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: 0x625c1ee04f99 - tokio::runtime::context::set_scheduler::{{closure}}::h095ce0b3816bd26b [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: 0x625c1ee2d672 - std::thread::local::LocalKey::try_with::h991bc0a3835ecd15 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/local.rs:315:12 [INFO] [stdout] 34: 0x625c1ee2ca1e - std::thread::local::LocalKey::with::h863242bde6228975 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/local.rs:279:20 [INFO] [stdout] 35: 0x625c1ee04f0d - tokio::runtime::context::set_scheduler::h2edc105fc119160b [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: 0x625c1ee06f10 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h28c617bb5d1f1141 [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: 0x625c1ee075c3 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::h00c3da0063dc8a3e [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: 0x625c1ee058b0 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::he042b4c871267bef [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: 0x625c1ee435e0 - tokio::runtime::context::runtime::enter_runtime::h7db4fbab7e0068a9 [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: 0x625c1ee05271 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::h713f5f9b96e7a166 [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: 0x625c1edb7124 - tokio::runtime::runtime::Runtime::block_on_inner::ha55816ab7aa68beb [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: 0x625c1edb72ec - tokio::runtime::runtime::Runtime::block_on::he27f58f3b47b2427 [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: 0x625c1edf7c2f - legion_server::legion::channel_manager::tests::test_topic_setting::h1fe0f17c563ac54b [INFO] [stdout] at /opt/rustwide/workdir/src/legion/channel_manager.rs:1058:32 [INFO] [stdout] 44: 0x625c1edf8737 - legion_server::legion::channel_manager::tests::test_topic_setting::{{closure}}::hba2b43f17cf82120 [INFO] [stdout] at /opt/rustwide/workdir/src/legion/channel_manager.rs:1030:34 [INFO] [stdout] 45: 0x625c1ed774b6 - core::ops::function::FnOnce::call_once::h5e4db15f34fe335a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 46: 0x625c1ee716fb - core::ops::function::FnOnce::call_once::hdbf42be2a49fb464 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 47: 0x625c1ee716fb - test::__rust_begin_short_backtrace::h8ae08814d38cb356 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:663:18 [INFO] [stdout] 48: 0x625c1ee871e5 - test::run_test_in_process::{{closure}}::h54574ee4f414d690 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:686:74 [INFO] [stdout] 49: 0x625c1ee871e5 - as core::ops::function::FnOnce<()>>::call_once::h01a0b7e7aad1a501 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 50: 0x625c1ee871e5 - std::panicking::catch_unwind::do_call::h23820e817c5612cd [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:590:40 [INFO] [stdout] 51: 0x625c1ee871e5 - std::panicking::catch_unwind::h89c73a1febce5587 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:553:19 [INFO] [stdout] 52: 0x625c1ee871e5 - std::panic::catch_unwind::h6f55caf410861914 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panic.rs:359:14 [INFO] [stdout] 53: 0x625c1ee871e5 - test::run_test_in_process::h4db851878e5d3983 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:686:27 [INFO] [stdout] 54: 0x625c1ee871e5 - test::run_test::{{closure}}::h57e8c5acaceacd24 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:607:43 [INFO] [stdout] 55: 0x625c1ee5dbd4 - test::run_test::{{closure}}::he775ccc3a9d3b97e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:637:41 [INFO] [stdout] 56: 0x625c1ee5dbd4 - std::sys::backtrace::__rust_begin_short_backtrace::hcd94d85d7765225a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:158:18 [INFO] [stdout] 57: 0x625c1ee6141a - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::ha814de8393f07830 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/mod.rs:559:17 [INFO] [stdout] 58: 0x625c1ee6141a - as core::ops::function::FnOnce<()>>::call_once::h8deb00af0abdeaf1 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 59: 0x625c1ee6141a - std::panicking::catch_unwind::do_call::h1917979b0c279ea2 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:590:40 [INFO] [stdout] 60: 0x625c1ee6141a - std::panicking::catch_unwind::h791ad91fee6ce34e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:553:19 [INFO] [stdout] 61: 0x625c1ee6141a - std::panic::catch_unwind::h982b8f40ed9c3cce [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panic.rs:359:14 [INFO] [stdout] 62: 0x625c1ee6141a - std::thread::Builder::spawn_unchecked_::{{closure}}::h545e54700c945db4 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/mod.rs:557:30 [INFO] [stdout] 63: 0x625c1ee6141a - core::ops::function::FnOnce::call_once{{vtable.shim}}::hb427481a5227d78a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 64: 0x625c1f2a120f - as core::ops::function::FnOnce>::call_once::h1d452951a81e9d0a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1985:9 [INFO] [stdout] 65: 0x625c1f2a120f - std::sys::pal::unix::thread::Thread::new::thread_start::h29c84e109630689a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/pal/unix/thread.rs:118:17 [INFO] [stdout] 66: 0x7fb45f494aa4 - [INFO] [stdout] 67: 0x7fb45f521a34 - clone [INFO] [stdout] 68: 0x0 - [INFO] [stdout] [INFO] [stdout] ---- legion::session::tests::test_legion_activation stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'legion::session::tests::test_legion_activation' (100) panicked at src/legion/session.rs:296:9: [INFO] [stdout] assertion failed: !session.is_legion_active().await [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x625c1f2cdd52 - std::backtrace_rs::backtrace::libunwind::trace::h589a96ef7638b383 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x625c1f2cdd52 - std::backtrace_rs::backtrace::trace_unsynchronized::h23a30a7548c40de4 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x625c1f2cdd52 - std::sys::backtrace::_print_fmt::h87dabd6535c8c07a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:66:9 [INFO] [stdout] 3: 0x625c1f2cdd52 - ::fmt::hffd20ad4e5eca8ab [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:39:26 [INFO] [stdout] 4: 0x625c1f2e078f - core::fmt::rt::Argument::fmt::h75c83e3fd5ce2419 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/fmt/rt.rs:173:76 [INFO] [stdout] 5: 0x625c1f2e078f - core::fmt::write::h6d9d3a7cfd7b84f5 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/fmt/mod.rs:1468:25 [INFO] [stdout] 6: 0x625c1f29aed3 - std::io::default_write_fmt::he11a713685e2464d [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x625c1f29aed3 - std::io::Write::write_fmt::h9d08f7e050bd2612 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/io/mod.rs:1954:13 [INFO] [stdout] 8: 0x625c1f2a6e52 - std::sys::backtrace::BacktraceLock::print::hb28797143397220e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:42:9 [INFO] [stdout] 9: 0x625c1f2abb2f - std::panicking::default_hook::{{closure}}::h7555113b62983743 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:301:27 [INFO] [stdout] 10: 0x625c1f2ab9c1 - std::panicking::default_hook::h2714b564abe8d914 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:325:9 [INFO] [stdout] 11: 0x625c1ee7193e - as core::ops::function::Fn>::call::h0e9de8cceb22406e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1999:9 [INFO] [stdout] 12: 0x625c1ee7193e - test::test_main_with_exit_callback::{{closure}}::h8125bd66cf4739d0 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x625c1f2ac27e - as core::ops::function::Fn>::call::h1fd0a0802eaec16b [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1999:9 [INFO] [stdout] 14: 0x625c1f2ac27e - std::panicking::panic_with_hook::h190dc82263685ec5 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:842:13 [INFO] [stdout] 15: 0x625c1f2abf66 - std::panicking::panic_handler::{{closure}}::h8b036a1b366643ac [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:700:13 [INFO] [stdout] 16: 0x625c1f2a6f89 - std::sys::backtrace::__rust_end_short_backtrace::h45affcfc0c830da8 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:174:18 [INFO] [stdout] 17: 0x625c1f28f0dd - __rustc[9b67c8562bba447b]::rust_begin_unwind [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:698:5 [INFO] [stdout] 18: 0x625c1f2e9650 - core::panicking::panic_fmt::hc084f85b1e76c16d [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panicking.rs:75:14 [INFO] [stdout] 19: 0x625c1f2e962c - core::panicking::panic::h019d7f9cc862af37 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panicking.rs:145:5 [INFO] [stdout] 20: 0x625c1ee45f67 - legion_server::legion::session::tests::test_legion_activation::{{closure}}::h068ce95ed9e10b1e [INFO] [stdout] at /opt/rustwide/workdir/src/legion/session.rs:296:9 [INFO] [stdout] 21: 0x625c1ee0acd2 - as core::future::future::Future>::poll::hdcf33a50a56d9177 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/future/future.rs:133:9 [INFO] [stdout] 22: 0x625c1ee0ac4d - as core::future::future::Future>::poll::h47f711c78cd17f64 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/future/future.rs:133:9 [INFO] [stdout] 23: 0x625c1ee08f3d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::ha5189f506de6b742 [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: 0x625c1ee08e4b - tokio::task::coop::with_budget::hd087d30f45ac7d3f [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: 0x625c1ee08e4b - tokio::task::coop::budget::h14d9951f02f00cd0 [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: 0x625c1ee08e4b - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::he500369c0fdd259b [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: 0x625c1ee065d0 - tokio::runtime::scheduler::current_thread::Context::enter::hebc3da59c3f688cf [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: 0x625c1ee078dd - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h1de49ee3a6a1b922 [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: 0x625c1ee07584 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::h3922cc2fce58efe1 [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: 0x625c1eddeccb - tokio::runtime::context::scoped::Scoped::set::hbb50d518af7977e1 [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: 0x625c1ee04f99 - tokio::runtime::context::set_scheduler::{{closure}}::h095ce0b3816bd26b [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: 0x625c1ee2d672 - std::thread::local::LocalKey::try_with::h991bc0a3835ecd15 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/local.rs:315:12 [INFO] [stdout] 33: 0x625c1ee2ca1e - std::thread::local::LocalKey::with::h863242bde6228975 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/local.rs:279:20 [INFO] [stdout] 34: 0x625c1ee04f0d - tokio::runtime::context::set_scheduler::h2edc105fc119160b [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: 0x625c1ee06f10 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h28c617bb5d1f1141 [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: 0x625c1ee075c3 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::h00c3da0063dc8a3e [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: 0x625c1ee058b0 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::he042b4c871267bef [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: 0x625c1ee435e0 - tokio::runtime::context::runtime::enter_runtime::h7db4fbab7e0068a9 [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: 0x625c1ee05271 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::h713f5f9b96e7a166 [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: 0x625c1edb7124 - tokio::runtime::runtime::Runtime::block_on_inner::ha55816ab7aa68beb [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: 0x625c1edb72ec - tokio::runtime::runtime::Runtime::block_on::he27f58f3b47b2427 [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: 0x625c1ee45923 - legion_server::legion::session::tests::test_legion_activation::ha282b208649769ce [INFO] [stdout] at /opt/rustwide/workdir/src/legion/session.rs:299:50 [INFO] [stdout] 43: 0x625c1ee46307 - legion_server::legion::session::tests::test_legion_activation::{{closure}}::ha10e581e4097ca28 [INFO] [stdout] at /opt/rustwide/workdir/src/legion/session.rs:292:38 [INFO] [stdout] 44: 0x625c1ed78566 - core::ops::function::FnOnce::call_once::hdd8390b066e064c1 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 45: 0x625c1ee716fb - core::ops::function::FnOnce::call_once::hdbf42be2a49fb464 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 46: 0x625c1ee716fb - test::__rust_begin_short_backtrace::h8ae08814d38cb356 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:663:18 [INFO] [stdout] 47: 0x625c1ee871e5 - test::run_test_in_process::{{closure}}::h54574ee4f414d690 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:686:74 [INFO] [stdout] 48: 0x625c1ee871e5 - as core::ops::function::FnOnce<()>>::call_once::h01a0b7e7aad1a501 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 49: 0x625c1ee871e5 - std::panicking::catch_unwind::do_call::h23820e817c5612cd [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:590:40 [INFO] [stdout] 50: 0x625c1ee871e5 - std::panicking::catch_unwind::h89c73a1febce5587 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:553:19 [INFO] [stdout] 51: 0x625c1ee871e5 - std::panic::catch_unwind::h6f55caf410861914 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panic.rs:359:14 [INFO] [stdout] 52: 0x625c1ee871e5 - test::run_test_in_process::h4db851878e5d3983 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:686:27 [INFO] [stdout] 53: 0x625c1ee871e5 - test::run_test::{{closure}}::h57e8c5acaceacd24 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:607:43 [INFO] [stdout] 54: 0x625c1ee5dbd4 - test::run_test::{{closure}}::he775ccc3a9d3b97e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:637:41 [INFO] [stdout] 55: 0x625c1ee5dbd4 - std::sys::backtrace::__rust_begin_short_backtrace::hcd94d85d7765225a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:158:18 [INFO] [stdout] 56: 0x625c1ee6141a - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::ha814de8393f07830 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/mod.rs:559:17 [INFO] [stdout] 57: 0x625c1ee6141a - as core::ops::function::FnOnce<()>>::call_once::h8deb00af0abdeaf1 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 58: 0x625c1ee6141a - std::panicking::catch_unwind::do_call::h1917979b0c279ea2 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:590:40 [INFO] [stdout] 59: 0x625c1ee6141a - std::panicking::catch_unwind::h791ad91fee6ce34e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:553:19 [INFO] [stdout] 60: 0x625c1ee6141a - std::panic::catch_unwind::h982b8f40ed9c3cce [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panic.rs:359:14 [INFO] [stdout] 61: 0x625c1ee6141a - std::thread::Builder::spawn_unchecked_::{{closure}}::h545e54700c945db4 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/mod.rs:557:30 [INFO] [stdout] 62: 0x625c1ee6141a - core::ops::function::FnOnce::call_once{{vtable.shim}}::hb427481a5227d78a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 63: 0x625c1f2a120f - as core::ops::function::FnOnce>::call_once::h1d452951a81e9d0a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1985:9 [INFO] [stdout] 64: 0x625c1f2a120f - std::sys::pal::unix::thread::Thread::new::thread_start::h29c84e109630689a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/pal/unix/thread.rs:118:17 [INFO] [stdout] 65: 0x7fb45f494aa4 - [INFO] [stdout] 66: 0x7fb45f521a34 - clone [INFO] [stdout] 67: 0x0 - [INFO] [stdout] [INFO] [stdout] ---- legion::channel_manager::tests::test_channel_creation stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'legion::channel_manager::tests::test_channel_creation' (88) 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: 0x625c1f2cdd52 - std::backtrace_rs::backtrace::libunwind::trace::h589a96ef7638b383 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x625c1f2cdd52 - std::backtrace_rs::backtrace::trace_unsynchronized::h23a30a7548c40de4 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x625c1f2cdd52 - std::sys::backtrace::_print_fmt::h87dabd6535c8c07a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:66:9 [INFO] [stdout] 3: 0x625c1f2cdd52 - ::fmt::hffd20ad4e5eca8ab [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:39:26 [INFO] [stdout] 4: 0x625c1f2e078f - core::fmt::rt::Argument::fmt::h75c83e3fd5ce2419 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/fmt/rt.rs:173:76 [INFO] [stdout] 5: 0x625c1f2e078f - core::fmt::write::h6d9d3a7cfd7b84f5 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/fmt/mod.rs:1468:25 [INFO] [stdout] 6: 0x625c1f29aed3 - std::io::default_write_fmt::he11a713685e2464d [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x625c1f29aed3 - std::io::Write::write_fmt::h9d08f7e050bd2612 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/io/mod.rs:1954:13 [INFO] [stdout] 8: 0x625c1f2a6e52 - std::sys::backtrace::BacktraceLock::print::hb28797143397220e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:42:9 [INFO] [stdout] 9: 0x625c1f2abb2f - std::panicking::default_hook::{{closure}}::h7555113b62983743 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:301:27 [INFO] [stdout] 10: 0x625c1f2ab9c1 - std::panicking::default_hook::h2714b564abe8d914 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:325:9 [INFO] [stdout] 11: 0x625c1ee7193e - as core::ops::function::Fn>::call::h0e9de8cceb22406e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1999:9 [INFO] [stdout] 12: 0x625c1ee7193e - test::test_main_with_exit_callback::{{closure}}::h8125bd66cf4739d0 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x625c1f2ac27e - as core::ops::function::Fn>::call::h1fd0a0802eaec16b [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1999:9 [INFO] [stdout] 14: 0x625c1f2ac27e - std::panicking::panic_with_hook::h190dc82263685ec5 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:842:13 [INFO] [stdout] 15: 0x625c1f2abf9a - std::panicking::panic_handler::{{closure}}::h8b036a1b366643ac [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:707:13 [INFO] [stdout] 16: 0x625c1f2a6f89 - std::sys::backtrace::__rust_end_short_backtrace::h45affcfc0c830da8 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:174:18 [INFO] [stdout] 17: 0x625c1f28f0dd - __rustc[9b67c8562bba447b]::rust_begin_unwind [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:698:5 [INFO] [stdout] 18: 0x625c1f2e9650 - core::panicking::panic_fmt::hc084f85b1e76c16d [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panicking.rs:75:14 [INFO] [stdout] 19: 0x625c1f2e8606 - core::result::unwrap_failed::hf926a4254073b4aa [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/result.rs:1852:5 [INFO] [stdout] 20: 0x625c1edf8f55 - core::result::Result::unwrap::h5c44ad36f157a7a6 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/result.rs:1223:23 [INFO] [stdout] 21: 0x625c1edf8f55 - legion_server::legion::channel_manager::tests::test_channel_creation::{{closure}}::h65fcb2bd8be5f587 [INFO] [stdout] at /opt/rustwide/workdir/src/legion/channel_manager.rs:1024:17 [INFO] [stdout] 22: 0x625c1ee0acd2 - as core::future::future::Future>::poll::hdcf33a50a56d9177 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/future/future.rs:133:9 [INFO] [stdout] 23: 0x625c1ee0ac4d - as core::future::future::Future>::poll::h47f711c78cd17f64 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/future/future.rs:133:9 [INFO] [stdout] 24: 0x625c1ee08f3d - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::ha5189f506de6b742 [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: 0x625c1ee08e4b - tokio::task::coop::with_budget::hd087d30f45ac7d3f [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: 0x625c1ee08e4b - tokio::task::coop::budget::h14d9951f02f00cd0 [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: 0x625c1ee08e4b - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::he500369c0fdd259b [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: 0x625c1ee065d0 - tokio::runtime::scheduler::current_thread::Context::enter::hebc3da59c3f688cf [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: 0x625c1ee078dd - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h1de49ee3a6a1b922 [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: 0x625c1ee07584 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::h3922cc2fce58efe1 [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: 0x625c1eddeccb - tokio::runtime::context::scoped::Scoped::set::hbb50d518af7977e1 [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: 0x625c1ee04f99 - tokio::runtime::context::set_scheduler::{{closure}}::h095ce0b3816bd26b [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: 0x625c1ee2d672 - std::thread::local::LocalKey::try_with::h991bc0a3835ecd15 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/local.rs:315:12 [INFO] [stdout] 34: 0x625c1ee2ca1e - std::thread::local::LocalKey::with::h863242bde6228975 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/local.rs:279:20 [INFO] [stdout] 35: 0x625c1ee04f0d - tokio::runtime::context::set_scheduler::h2edc105fc119160b [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: 0x625c1ee06f10 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h28c617bb5d1f1141 [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: 0x625c1ee075c3 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::h00c3da0063dc8a3e [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: 0x625c1ee058b0 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::he042b4c871267bef [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: 0x625c1ee435e0 - tokio::runtime::context::runtime::enter_runtime::h7db4fbab7e0068a9 [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: 0x625c1ee05271 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::h713f5f9b96e7a166 [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: 0x625c1edb7124 - tokio::runtime::runtime::Runtime::block_on_inner::ha55816ab7aa68beb [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: 0x625c1edb72ec - tokio::runtime::runtime::Runtime::block_on::he27f58f3b47b2427 [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: 0x625c1edf88bd - legion_server::legion::channel_manager::tests::test_channel_creation::h8b757317b8d44287 [INFO] [stdout] at /opt/rustwide/workdir/src/legion/channel_manager.rs:1026:32 [INFO] [stdout] 44: 0x625c1edf9077 - legion_server::legion::channel_manager::tests::test_channel_creation::{{closure}}::h883280f6103abe5b [INFO] [stdout] at /opt/rustwide/workdir/src/legion/channel_manager.rs:1011:37 [INFO] [stdout] 45: 0x625c1ed777c6 - core::ops::function::FnOnce::call_once::h737595f54637fb9a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 46: 0x625c1ee716fb - core::ops::function::FnOnce::call_once::hdbf42be2a49fb464 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 47: 0x625c1ee716fb - test::__rust_begin_short_backtrace::h8ae08814d38cb356 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:663:18 [INFO] [stdout] 48: 0x625c1ee871e5 - test::run_test_in_process::{{closure}}::h54574ee4f414d690 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:686:74 [INFO] [stdout] 49: 0x625c1ee871e5 - as core::ops::function::FnOnce<()>>::call_once::h01a0b7e7aad1a501 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 50: 0x625c1ee871e5 - std::panicking::catch_unwind::do_call::h23820e817c5612cd [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:590:40 [INFO] [stdout] 51: 0x625c1ee871e5 - std::panicking::catch_unwind::h89c73a1febce5587 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:553:19 [INFO] [stdout] 52: 0x625c1ee871e5 - std::panic::catch_unwind::h6f55caf410861914 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panic.rs:359:14 [INFO] [stdout] 53: 0x625c1ee871e5 - test::run_test_in_process::h4db851878e5d3983 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:686:27 [INFO] [stdout] 54: 0x625c1ee871e5 - test::run_test::{{closure}}::h57e8c5acaceacd24 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:607:43 [INFO] [stdout] 55: 0x625c1ee5dbd4 - test::run_test::{{closure}}::he775ccc3a9d3b97e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/test/src/lib.rs:637:41 [INFO] [stdout] 56: 0x625c1ee5dbd4 - std::sys::backtrace::__rust_begin_short_backtrace::hcd94d85d7765225a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/backtrace.rs:158:18 [INFO] [stdout] 57: 0x625c1ee6141a - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::ha814de8393f07830 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/mod.rs:559:17 [INFO] [stdout] 58: 0x625c1ee6141a - as core::ops::function::FnOnce<()>>::call_once::h8deb00af0abdeaf1 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 59: 0x625c1ee6141a - std::panicking::catch_unwind::do_call::h1917979b0c279ea2 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:590:40 [INFO] [stdout] 60: 0x625c1ee6141a - std::panicking::catch_unwind::h791ad91fee6ce34e [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panicking.rs:553:19 [INFO] [stdout] 61: 0x625c1ee6141a - std::panic::catch_unwind::h982b8f40ed9c3cce [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/panic.rs:359:14 [INFO] [stdout] 62: 0x625c1ee6141a - std::thread::Builder::spawn_unchecked_::{{closure}}::h545e54700c945db4 [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/thread/mod.rs:557:30 [INFO] [stdout] 63: 0x625c1ee6141a - core::ops::function::FnOnce::call_once{{vtable.shim}}::hb427481a5227d78a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/core/src/ops/function.rs:253:5 [INFO] [stdout] 64: 0x625c1f2a120f - as core::ops::function::FnOnce>::call_once::h1d452951a81e9d0a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/alloc/src/boxed.rs:1985:9 [INFO] [stdout] 65: 0x625c1f2a120f - std::sys::pal::unix::thread::Thread::new::thread_start::h29c84e109630689a [INFO] [stdout] at /rustc/b83b707f97d809763b7861afa7638871f3339a33/library/std/src/sys/pal/unix/thread.rs:118:17 [INFO] [stdout] 66: 0x7fb45f494aa4 - [INFO] [stdout] 67: 0x7fb45f521a34 - clone [INFO] [stdout] 68: 0x0 - [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.11s [INFO] [stdout] [INFO] [stderr] error: test failed, to rerun pass `--bin legion-server` [INFO] running `Command { std: "docker" "inspect" "09e6ece1f54dc6cae763bfd78947bfdf9dd0723f1566b3556f0a37d59f4da821", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "09e6ece1f54dc6cae763bfd78947bfdf9dd0723f1566b3556f0a37d59f4da821", kill_on_drop: false }` [INFO] [stdout] 09e6ece1f54dc6cae763bfd78947bfdf9dd0723f1566b3556f0a37d59f4da821