[INFO] fetching crate matchforge 0.1.0... [INFO] testing matchforge-0.1.0 against try#dec9417b8611e34e787a3e4c37686b5131f9e5c5 for pr-154210-1 [INFO] extracting crate matchforge 0.1.0 into /workspace/builds/worker-2-tc2/source [INFO] started tweaking crates.io crate matchforge 0.1.0 [INFO] removed 0 missing examples [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate matchforge 0.1.0 [INFO] tweaked toml for crates.io crate matchforge 0.1.0 written to /workspace/builds/worker-2-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate matchforge 0.1.0 on toolchain dec9417b8611e34e787a3e4c37686b5131f9e5c5 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate matchforge 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" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 10a795d2db3a5a11cdb44ac4ea830ab7a56041a57c4ed36c36f30d2a7ea20a74 [INFO] running `Command { std: "docker" "start" "-a" "10a795d2db3a5a11cdb44ac4ea830ab7a56041a57c4ed36c36f30d2a7ea20a74", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "10a795d2db3a5a11cdb44ac4ea830ab7a56041a57c4ed36c36f30d2a7ea20a74", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "10a795d2db3a5a11cdb44ac4ea830ab7a56041a57c4ed36c36f30d2a7ea20a74", kill_on_drop: false }` [INFO] [stdout] 10a795d2db3a5a11cdb44ac4ea830ab7a56041a57c4ed36c36f30d2a7ea20a74 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 4d0560e92040c8cbabe3b7e7eeb27c1b3fdb67d2c6cc3ac0e3e99f0520b0efc8 [INFO] running `Command { std: "docker" "start" "-a" "4d0560e92040c8cbabe3b7e7eeb27c1b3fdb67d2c6cc3ac0e3e99f0520b0efc8", kill_on_drop: false }` [INFO] [stderr] Compiling syn v2.0.111 [INFO] [stderr] Compiling zerocopy v0.8.31 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling signal-hook-registry v1.4.7 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling tokio v1.48.0 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling chrono v0.4.42 [INFO] [stderr] Compiling uuid v1.18.1 [INFO] [stderr] Compiling matchforge v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `Instant` [INFO] [stdout] --> src/analytics/metrics.rs:9:27 [INFO] [stdout] | [INFO] [stdout] 9 | use std::time::{Duration, Instant}; [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: `DateTime` [INFO] [stdout] --> src/persistence/redis.rs:4:14 [INFO] [stdout] | [INFO] [stdout] 4 | use chrono::{DateTime, Utc}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/analytics/dashboard.rs:957:13 [INFO] [stdout] | [INFO] [stdout] 957 | let mut headers = vec![ [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player_id` [INFO] [stdout] --> src/analytics/metrics.rs:169:48 [INFO] [stdout] | [INFO] [stdout] 169 | pub async fn record_player_activity(&self, player_id: Uuid, activity_type: PlayerActivityType) { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `match_id` [INFO] [stdout] --> src/analytics/metrics.rs:599:43 [INFO] [stdout] | [INFO] [stdout] 599 | MetricEvent::MatchFound { match_id, quality } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `match_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `quality` [INFO] [stdout] --> src/analytics/metrics.rs:599:53 [INFO] [stdout] | [INFO] [stdout] 599 | MetricEvent::MatchFound { match_id, quality } => { [INFO] [stdout] | ^^^^^^^ help: try ignoring the field: `quality: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player_id` [INFO] [stdout] --> src/analytics/metrics.rs:602:46 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^ help: try ignoring the field: `player_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `old_rating` [INFO] [stdout] --> src/analytics/metrics.rs:602:57 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^^ help: try ignoring the field: `old_rating: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `new_rating` [INFO] [stdout] --> src/analytics/metrics.rs:602:69 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^^ help: try ignoring the field: `new_rating: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `party_id` [INFO] [stdout] --> src/analytics/metrics.rs:605:45 [INFO] [stdout] | [INFO] [stdout] 605 | MetricEvent::PartyCreated { party_id, size } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `party_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `format` [INFO] [stdout] --> src/analytics/reports.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 335 | format: ReportFormat, [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_format` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `generation_time` [INFO] [stdout] --> src/analytics/reports.rs:361:13 [INFO] [stdout] | [INFO] [stdout] 361 | let generation_time = start_time.elapsed(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_generation_time` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:382:49 [INFO] [stdout] | [INFO] [stdout] 382 | async fn generate_performance_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:456:54 [INFO] [stdout] | [INFO] [stdout] 456 | async fn generate_player_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:526:53 [INFO] [stdout] | [INFO] [stdout] 526 | async fn generate_queue_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:573:54 [INFO] [stdout] | [INFO] [stdout] 573 | async fn generate_rating_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:620:53 [INFO] [stdout] | [INFO] [stdout] 620 | async fn generate_party_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:667:51 [INFO] [stdout] | [INFO] [stdout] 667 | async fn generate_system_health_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:742:56 [INFO] [stdout] | [INFO] [stdout] 742 | async fn generate_business_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:812:44 [INFO] [stdout] | [INFO] [stdout] 812 | async fn generate_custom_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rating_distribution` [INFO] [stdout] --> src/analytics/reports.rs:984:40 [INFO] [stdout] | [INFO] [stdout] 984 | fn calculate_average_rating(&self, rating_distribution: &HashMap) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rating_distribution` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `snapshot` [INFO] [stdout] --> src/analytics/insights.rs:896:38 [INFO] [stdout] | [INFO] [stdout] 896 | async fn detect_anomalies(&self, snapshot: &MetricsSnapshot) -> Result, InsightError> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_snapshot` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `time_range` [INFO] [stdout] --> src/analytics/dashboard.rs:603:38 [INFO] [stdout] | [INFO] [stdout] 603 | async fn generate_widgets(&self, time_range: &TimeRange) -> Result, DashboardError> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_time_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `connection_string` [INFO] [stdout] --> src/persistence/redis.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | pub async fn new(connection_string: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection_string` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ip` [INFO] [stdout] --> src/security/security.rs:199:28 [INFO] [stdout] | [INFO] [stdout] 199 | } else if let Some(ip) = &request.remote_addr { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hash` [INFO] [stdout] --> src/security/security.rs:201:17 [INFO] [stdout] | [INFO] [stdout] 201 | let hash = std::collections::hash_map::DefaultHasher::new(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `session_id` [INFO] [stdout] --> src/security/security.rs:236:32 [INFO] [stdout] | [INFO] [stdout] 236 | fn validate_session(&self, session_id: &str) -> Result, SecurityError> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `matches_per_hour`, `rating_accuracy`, `solo_vs_party_win_rates`, and `daily_metrics` are never read [INFO] [stdout] --> src/analytics/metrics.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct AnalyticsMetrics { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 24 | matches_per_hour: AtomicU64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 37 | rating_accuracy: AtomicI64, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | solo_vs_party_win_rates: Arc>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | daily_metrics: Arc>>, [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 `ml_models` is never read [INFO] [stdout] --> src/analytics/insights.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct InsightEngine { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 19 | ml_models: Arc>>, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `model_type`, `accuracy`, `last_trained`, and `training_data_size` are never read [INFO] [stdout] --> src/analytics/insights.rs:176:5 [INFO] [stdout] | [INFO] [stdout] 175 | struct MLModel { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 176 | model_type: ModelType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 177 | accuracy: f64, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 178 | last_trained: DateTime, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 179 | training_data_size: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MLModel` 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 `LinearRegression`, `TimeSeries`, `AnomalyDetection`, `Clustering`, and `Classification` are never constructed [INFO] [stdout] --> src/analytics/insights.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 184 | enum ModelType { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 185 | LinearRegression, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 186 | TimeSeries, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 187 | AnomalyDetection, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 188 | Clustering, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 189 | Classification, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ModelType` 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 `report_generator` is never read [INFO] [stdout] --> src/analytics/dashboard.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct DashboardData { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] 16 | analytics: Arc, [INFO] [stdout] 17 | report_generator: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tau` is never read [INFO] [stdout] --> src/mmr/algorithm.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 63 | pub struct Glicko2Algorithm { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 64 | tau: f64, // System volatility constant [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `calculate_match_quality` is never used [INFO] [stdout] --> src/queue/advanced_strategies.rs:136:8 [INFO] [stdout] | [INFO] [stdout] 21 | impl SwissMatcher { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 136 | fn calculate_match_quality( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `constraints_satisfied` is never used [INFO] [stdout] --> src/queue/advanced_strategies.rs:416:8 [INFO] [stdout] | [INFO] [stdout] 355 | impl AdaptiveMatcher { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 416 | fn constraints_satisfied(&self, entry: &QueueEntry, constraints: &MatchConstraints) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `rate_limiter` is never read [INFO] [stdout] --> src/security/anti_abuse.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 16 | pub struct AntiAbuseSystem { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 17 | config: AntiAbuseConfig, [INFO] [stdout] 18 | rate_limiter: RateLimiter, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `player_id`, `reports_received`, `reports_made`, `matches_abandoned`, and `suspicious_activities` are never read [INFO] [stdout] --> src/security/anti_abuse.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 127 | struct PlayerBehavior { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 128 | player_id: Uuid, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | reports_received: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 133 | reports_made: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 134 | matches_abandoned: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 135 | suspicious_activities: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PlayerBehavior` 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 `event_type` is never read [INFO] [stdout] --> src/telemetry/events.rs:351:5 [INFO] [stdout] | [INFO] [stdout] 350 | pub struct EventBuilder { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 351 | event_type: EventType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | async fn get(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] = note: `#[warn(async_fn_in_trait)]` on by default [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 19 - async fn get(&mut self, key: &str) -> Result; [INFO] [stdout] 19 + fn get(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | async fn set(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 20 - async fn set(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] 20 + fn set(&mut self, key: &str, value: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 21 - async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>; [INFO] [stdout] 21 + fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | async fn del(&mut self, key: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 22 - async fn del(&mut self, key: &str) -> Result<()>; [INFO] [stdout] 22 + fn del(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | async fn sadd(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 23 - async fn sadd(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 23 + fn sadd(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | async fn srem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 24 - async fn srem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 24 + fn srem(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 25 | async fn smembers(&mut self, key: &str) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 25 - async fn smembers(&mut self, key: &str) -> Result>; [INFO] [stdout] 25 + fn smembers(&mut self, key: &str) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | async fn lpush(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 26 - async fn lpush(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] 26 + fn lpush(&mut self, key: &str, value: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 27 - async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>; [INFO] [stdout] 27 + fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 28 | async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 28 - async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>; [INFO] [stdout] 28 + fn zadd(&mut self, key: &str, score: f64, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | async fn zrem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 29 - async fn zrem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 29 + fn zrem(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 30 - async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result>; [INFO] [stdout] 30 + fn zrange(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 31 - async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result>; [INFO] [stdout] 31 + fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | async fn keys(&mut self, pattern: &str) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 32 - async fn keys(&mut self, pattern: &str) -> Result>; [INFO] [stdout] 32 + fn keys(&mut self, pattern: &str) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 33 | async fn zcard(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 33 - async fn zcard(&mut self, key: &str) -> Result; [INFO] [stdout] 33 + fn zcard(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:34:5 [INFO] [stdout] | [INFO] [stdout] 34 | async fn llen(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 34 - async fn llen(&mut self, key: &str) -> Result; [INFO] [stdout] 34 + fn llen(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 35 | async fn exists(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 35 - async fn exists(&mut self, key: &str) -> Result; [INFO] [stdout] 35 + fn exists(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 34.97s [INFO] running `Command { std: "docker" "inspect" "4d0560e92040c8cbabe3b7e7eeb27c1b3fdb67d2c6cc3ac0e3e99f0520b0efc8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4d0560e92040c8cbabe3b7e7eeb27c1b3fdb67d2c6cc3ac0e3e99f0520b0efc8", kill_on_drop: false }` [INFO] [stdout] 4d0560e92040c8cbabe3b7e7eeb27c1b3fdb67d2c6cc3ac0e3e99f0520b0efc8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+dec9417b8611e34e787a3e4c37686b5131f9e5c5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0e9e640061afda1395842b68c93e4e9c7b22e4ce03e1e76b3af30c43e2ba3398 [INFO] running `Command { std: "docker" "start" "-a" "0e9e640061afda1395842b68c93e4e9c7b22e4ce03e1e76b3af30c43e2ba3398", kill_on_drop: false }` [INFO] [stderr] Compiling zerocopy v0.8.31 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling zerocopy-derive v0.8.31 [INFO] [stderr] Compiling tokio v1.48.0 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling plotters-backend v0.3.7 [INFO] [stderr] Compiling ciborium-io v0.2.2 [INFO] [stderr] Compiling regex-syntax v0.8.8 [INFO] [stderr] Compiling clap_builder v4.5.53 [INFO] [stderr] Compiling plotters-svg v0.3.7 [INFO] [stderr] Compiling async-stream-impl v0.3.6 [INFO] [stderr] Compiling futures-util v0.3.31 [INFO] [stderr] Compiling cast v0.3.0 [INFO] [stderr] Compiling async-stream v0.3.6 [INFO] [stderr] Compiling criterion-plot v0.5.0 [INFO] [stderr] Compiling plotters v0.3.7 [INFO] [stderr] Compiling rayon v1.11.0 [INFO] [stderr] Compiling regex-automata v0.4.13 [INFO] [stderr] Compiling serde_json v1.0.145 [INFO] [stderr] Compiling uuid v1.18.1 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling half v2.7.1 [INFO] [stderr] Compiling chrono v0.4.42 [INFO] [stderr] Compiling ciborium-ll v0.2.2 [INFO] [stderr] Compiling futures-executor v0.3.31 [INFO] [stderr] Compiling clap v4.5.53 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling is-terminal v0.4.17 [INFO] [stderr] Compiling anes v0.1.6 [INFO] [stderr] Compiling tinytemplate v1.2.1 [INFO] [stderr] Compiling ciborium v0.2.2 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling regex v1.12.2 [INFO] [stderr] Compiling futures v0.3.31 [INFO] [stderr] Compiling criterion v0.5.1 [INFO] [stderr] Compiling tokio-stream v0.1.17 [INFO] [stderr] Compiling matchforge v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Compiling tokio-test v0.4.4 [INFO] [stdout] warning: unused import: `Instant` [INFO] [stdout] --> src/analytics/metrics.rs:9:27 [INFO] [stdout] | [INFO] [stdout] 9 | use std::time::{Duration, Instant}; [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: `DateTime` [INFO] [stdout] --> src/persistence/redis.rs:4:14 [INFO] [stdout] | [INFO] [stdout] 4 | use chrono::{DateTime, Utc}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/analytics/dashboard.rs:957:13 [INFO] [stdout] | [INFO] [stdout] 957 | let mut headers = vec![ [INFO] [stdout] | ----^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player_id` [INFO] [stdout] --> src/analytics/metrics.rs:169:48 [INFO] [stdout] | [INFO] [stdout] 169 | pub async fn record_player_activity(&self, player_id: Uuid, activity_type: PlayerActivityType) { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `match_id` [INFO] [stdout] --> src/analytics/metrics.rs:599:43 [INFO] [stdout] | [INFO] [stdout] 599 | MetricEvent::MatchFound { match_id, quality } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `match_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `quality` [INFO] [stdout] --> src/analytics/metrics.rs:599:53 [INFO] [stdout] | [INFO] [stdout] 599 | MetricEvent::MatchFound { match_id, quality } => { [INFO] [stdout] | ^^^^^^^ help: try ignoring the field: `quality: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player_id` [INFO] [stdout] --> src/analytics/metrics.rs:602:46 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^ help: try ignoring the field: `player_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `old_rating` [INFO] [stdout] --> src/analytics/metrics.rs:602:57 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^^ help: try ignoring the field: `old_rating: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `new_rating` [INFO] [stdout] --> src/analytics/metrics.rs:602:69 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^^ help: try ignoring the field: `new_rating: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `party_id` [INFO] [stdout] --> src/analytics/metrics.rs:605:45 [INFO] [stdout] | [INFO] [stdout] 605 | MetricEvent::PartyCreated { party_id, size } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `party_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `format` [INFO] [stdout] --> src/analytics/reports.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 335 | format: ReportFormat, [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_format` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `generation_time` [INFO] [stdout] --> src/analytics/reports.rs:361:13 [INFO] [stdout] | [INFO] [stdout] 361 | let generation_time = start_time.elapsed(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_generation_time` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:382:49 [INFO] [stdout] | [INFO] [stdout] 382 | async fn generate_performance_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:456:54 [INFO] [stdout] | [INFO] [stdout] 456 | async fn generate_player_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:526:53 [INFO] [stdout] | [INFO] [stdout] 526 | async fn generate_queue_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:573:54 [INFO] [stdout] | [INFO] [stdout] 573 | async fn generate_rating_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:620:53 [INFO] [stdout] | [INFO] [stdout] 620 | async fn generate_party_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:667:51 [INFO] [stdout] | [INFO] [stdout] 667 | async fn generate_system_health_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:742:56 [INFO] [stdout] | [INFO] [stdout] 742 | async fn generate_business_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:812:44 [INFO] [stdout] | [INFO] [stdout] 812 | async fn generate_custom_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rating_distribution` [INFO] [stdout] --> src/analytics/reports.rs:984:40 [INFO] [stdout] | [INFO] [stdout] 984 | fn calculate_average_rating(&self, rating_distribution: &HashMap) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rating_distribution` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `snapshot` [INFO] [stdout] --> src/analytics/insights.rs:896:38 [INFO] [stdout] | [INFO] [stdout] 896 | async fn detect_anomalies(&self, snapshot: &MetricsSnapshot) -> Result, InsightError> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_snapshot` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `time_range` [INFO] [stdout] --> src/analytics/dashboard.rs:603:38 [INFO] [stdout] | [INFO] [stdout] 603 | async fn generate_widgets(&self, time_range: &TimeRange) -> Result, DashboardError> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_time_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Instant` [INFO] [stdout] --> src/analytics/metrics.rs:9:27 [INFO] [stdout] | [INFO] [stdout] 9 | use std::time::{Duration, Instant}; [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: `DateTime` [INFO] [stdout] --> src/persistence/redis.rs:4:14 [INFO] [stdout] | [INFO] [stdout] 4 | use chrono::{DateTime, Utc}; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `connection_string` [INFO] [stdout] --> src/persistence/redis.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | pub async fn new(connection_string: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection_string` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ip` [INFO] [stdout] --> src/security/security.rs:199:28 [INFO] [stdout] | [INFO] [stdout] 199 | } else if let Some(ip) = &request.remote_addr { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hash` [INFO] [stdout] --> src/security/security.rs:201:17 [INFO] [stdout] | [INFO] [stdout] 201 | let hash = std::collections::hash_map::DefaultHasher::new(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `session_id` [INFO] [stdout] --> src/security/security.rs:236:32 [INFO] [stdout] | [INFO] [stdout] 236 | fn validate_session(&self, session_id: &str) -> Result, SecurityError> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/analytics/dashboard.rs:957:13 [INFO] [stdout] | [INFO] [stdout] 957 | let mut headers = vec![ [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: fields `matches_per_hour`, `rating_accuracy`, `solo_vs_party_win_rates`, and `daily_metrics` are never read [INFO] [stdout] --> src/analytics/metrics.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct AnalyticsMetrics { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 24 | matches_per_hour: AtomicU64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 37 | rating_accuracy: AtomicI64, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | solo_vs_party_win_rates: Arc>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | daily_metrics: Arc>>, [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 `ml_models` is never read [INFO] [stdout] --> src/analytics/insights.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct InsightEngine { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 19 | ml_models: Arc>>, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `model_type`, `accuracy`, `last_trained`, and `training_data_size` are never read [INFO] [stdout] --> src/analytics/insights.rs:176:5 [INFO] [stdout] | [INFO] [stdout] 175 | struct MLModel { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 176 | model_type: ModelType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 177 | accuracy: f64, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 178 | last_trained: DateTime, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 179 | training_data_size: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MLModel` 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 `LinearRegression`, `TimeSeries`, `AnomalyDetection`, `Clustering`, and `Classification` are never constructed [INFO] [stdout] --> src/analytics/insights.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 184 | enum ModelType { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 185 | LinearRegression, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 186 | TimeSeries, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 187 | AnomalyDetection, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 188 | Clustering, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 189 | Classification, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ModelType` 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 `report_generator` is never read [INFO] [stdout] --> src/analytics/dashboard.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct DashboardData { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] 16 | analytics: Arc, [INFO] [stdout] 17 | report_generator: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tau` is never read [INFO] [stdout] --> src/mmr/algorithm.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 63 | pub struct Glicko2Algorithm { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 64 | tau: f64, // System volatility constant [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `calculate_match_quality` is never used [INFO] [stdout] --> src/queue/advanced_strategies.rs:136:8 [INFO] [stdout] | [INFO] [stdout] 21 | impl SwissMatcher { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 136 | fn calculate_match_quality( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `constraints_satisfied` is never used [INFO] [stdout] --> src/queue/advanced_strategies.rs:416:8 [INFO] [stdout] | [INFO] [stdout] 355 | impl AdaptiveMatcher { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 416 | fn constraints_satisfied(&self, entry: &QueueEntry, constraints: &MatchConstraints) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `rate_limiter` is never read [INFO] [stdout] --> src/security/anti_abuse.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 16 | pub struct AntiAbuseSystem { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 17 | config: AntiAbuseConfig, [INFO] [stdout] 18 | rate_limiter: RateLimiter, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `player_id`, `reports_received`, `reports_made`, `matches_abandoned`, and `suspicious_activities` are never read [INFO] [stdout] --> src/security/anti_abuse.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 127 | struct PlayerBehavior { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 128 | player_id: Uuid, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | reports_received: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 133 | reports_made: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 134 | matches_abandoned: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 135 | suspicious_activities: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PlayerBehavior` 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 `event_type` is never read [INFO] [stdout] --> src/telemetry/events.rs:351:5 [INFO] [stdout] | [INFO] [stdout] 350 | pub struct EventBuilder { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 351 | event_type: EventType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | async fn get(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] = note: `#[warn(async_fn_in_trait)]` on by default [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 19 - async fn get(&mut self, key: &str) -> Result; [INFO] [stdout] 19 + fn get(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | async fn set(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 20 - async fn set(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] 20 + fn set(&mut self, key: &str, value: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 21 - async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>; [INFO] [stdout] 21 + fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | async fn del(&mut self, key: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 22 - async fn del(&mut self, key: &str) -> Result<()>; [INFO] [stdout] 22 + fn del(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | async fn sadd(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 23 - async fn sadd(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 23 + fn sadd(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | async fn srem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 24 - async fn srem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 24 + fn srem(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 25 | async fn smembers(&mut self, key: &str) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 25 - async fn smembers(&mut self, key: &str) -> Result>; [INFO] [stdout] 25 + fn smembers(&mut self, key: &str) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | async fn lpush(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 26 - async fn lpush(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] 26 + fn lpush(&mut self, key: &str, value: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 27 - async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>; [INFO] [stdout] 27 + fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 28 | async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 28 - async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>; [INFO] [stdout] 28 + fn zadd(&mut self, key: &str, score: f64, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | async fn zrem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 29 - async fn zrem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 29 + fn zrem(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 30 - async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result>; [INFO] [stdout] 30 + fn zrange(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 31 - async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result>; [INFO] [stdout] 31 + fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | async fn keys(&mut self, pattern: &str) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 32 - async fn keys(&mut self, pattern: &str) -> Result>; [INFO] [stdout] 32 + fn keys(&mut self, pattern: &str) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 33 | async fn zcard(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 33 - async fn zcard(&mut self, key: &str) -> Result; [INFO] [stdout] 33 + fn zcard(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:34:5 [INFO] [stdout] | [INFO] [stdout] 34 | async fn llen(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 34 - async fn llen(&mut self, key: &str) -> Result; [INFO] [stdout] 34 + fn llen(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 35 | async fn exists(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 35 - async fn exists(&mut self, key: &str) -> Result; [INFO] [stdout] 35 + fn exists(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player_id` [INFO] [stdout] --> src/analytics/metrics.rs:169:48 [INFO] [stdout] | [INFO] [stdout] 169 | pub async fn record_player_activity(&self, player_id: Uuid, activity_type: PlayerActivityType) { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `match_id` [INFO] [stdout] --> src/analytics/metrics.rs:599:43 [INFO] [stdout] | [INFO] [stdout] 599 | MetricEvent::MatchFound { match_id, quality } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `match_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `quality` [INFO] [stdout] --> src/analytics/metrics.rs:599:53 [INFO] [stdout] | [INFO] [stdout] 599 | MetricEvent::MatchFound { match_id, quality } => { [INFO] [stdout] | ^^^^^^^ help: try ignoring the field: `quality: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `player_id` [INFO] [stdout] --> src/analytics/metrics.rs:602:46 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^ help: try ignoring the field: `player_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `old_rating` [INFO] [stdout] --> src/analytics/metrics.rs:602:57 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^^ help: try ignoring the field: `old_rating: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `new_rating` [INFO] [stdout] --> src/analytics/metrics.rs:602:69 [INFO] [stdout] | [INFO] [stdout] 602 | MetricEvent::RatingUpdated { player_id, old_rating, new_rating } => { [INFO] [stdout] | ^^^^^^^^^^ help: try ignoring the field: `new_rating: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `party_id` [INFO] [stdout] --> src/analytics/metrics.rs:605:45 [INFO] [stdout] | [INFO] [stdout] 605 | MetricEvent::PartyCreated { party_id, size } => { [INFO] [stdout] | ^^^^^^^^ help: try ignoring the field: `party_id: _` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `RunnerConfig` in this scope [INFO] [stdout] --> tests/integration_tests.rs:203:25 [INFO] [stdout] | [INFO] [stdout] 203 | let runner_config = RunnerConfig { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] ::: src/queue/manager.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct QueueConfig { [INFO] [stdout] | ---------------------- similarly named struct `QueueConfig` defined here [INFO] [stdout] | [INFO] [stdout] help: a struct with a similar name exists [INFO] [stdout] | [INFO] [stdout] 203 - let runner_config = RunnerConfig { [INFO] [stdout] 203 + let runner_config = QueueConfig { [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::RunnerConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `QueueRunnerConfig` in this scope [INFO] [stdout] --> tests/integration_tests.rs:209:54 [INFO] [stdout] | [INFO] [stdout] 209 | configs.insert("test_queue".to_string(), QueueRunnerConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::runner::QueueRunnerConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `Team` in this scope [INFO] [stdout] --> tests/integration_tests.rs:302:13 [INFO] [stdout] | [INFO] [stdout] 302 | Team { [INFO] [stdout] | ^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::lobby::Team; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `Team` in this scope [INFO] [stdout] --> tests/integration_tests.rs:306:13 [INFO] [stdout] | [INFO] [stdout] 306 | Team { [INFO] [stdout] | ^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::lobby::Team; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `party1_entry` [INFO] [stdout] --> examples/party_matchmaking.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | let party1_entry = queue_manager.join_queue_party( [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_party1_entry` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `party2_entry` [INFO] [stdout] --> examples/party_matchmaking.rs:97:9 [INFO] [stdout] | [INFO] [stdout] 97 | let party2_entry = queue_manager.join_queue_party( [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_party2_entry` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `AnalyticsConfig` in this scope [INFO] [stdout] --> examples/simple_test.rs:33:18 [INFO] [stdout] | [INFO] [stdout] 33 | let config = AnalyticsConfig::default(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ use of undeclared type `AnalyticsConfig` [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 3 + use matchforge::analytics::metrics::AnalyticsConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `AntiAbuseConfig` in this scope [INFO] [stdout] --> examples/simple_test.rs:176:29 [INFO] [stdout] | [INFO] [stdout] 176 | let anti_abuse_config = AntiAbuseConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 3 + use matchforge::security::anti_abuse::AntiAbuseConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `entry` [INFO] [stdout] --> examples/custom_mmr.rs:172:13 [INFO] [stdout] | [INFO] [stdout] 172 | let entry = queue_manager.join_queue_solo( [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_entry` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in an async function that returns `Result` [INFO] [stdout] --> examples/simple_test.rs:147:69 [INFO] [stdout] | [INFO] [stdout] 124 | async fn test_party_system() -> Result<()> { [INFO] [stdout] | ____________________________________________- [INFO] [stdout] 125 | | println!("\n👥 Testing Party System..."); [INFO] [stdout] 126 | | [INFO] [stdout] 127 | | let persistence = Arc::new(InMemoryAdapter::new()); [INFO] [stdout] ... | [INFO] [stdout] 147 | | let updated_party = party_manager.get_player_party(leader).await?; [INFO] [stdout] | | ^ use `.ok_or(...)?` to provide an error compatible with `std::result::Result<(), MatchForgeError>` [INFO] [stdout] ... | [INFO] [stdout] 151 | | Ok(()) [INFO] [stdout] 152 | | } [INFO] [stdout] | |_- this function returns a `Result` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0560]: struct `matchforge::security::RateLimitConfig` has no field named `window_seconds` [INFO] [stdout] --> examples/simple_test.rs:160:9 [INFO] [stdout] | [INFO] [stdout] 160 | window_seconds: 60, [INFO] [stdout] | ^^^^^^^^^^^^^^ `matchforge::security::RateLimitConfig` does not have this field [INFO] [stdout] | [INFO] [stdout] = note: available fields are: `window`, `penalty_multiplier`, `max_penalty_duration` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0560]: struct `matchforge::security::RateLimitConfig` has no field named `burst_size` [INFO] [stdout] --> examples/simple_test.rs:161:9 [INFO] [stdout] | [INFO] [stdout] 161 | burst_size: 5, [INFO] [stdout] | ^^^^^^^^^^ `matchforge::security::RateLimitConfig` does not have this field [INFO] [stdout] | [INFO] [stdout] = note: available fields are: `window`, `penalty_multiplier`, `max_penalty_duration` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `AnalyticsConfig` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:22:52 [INFO] [stdout] | [INFO] [stdout] 22 | let analytics = Arc::new(AnalyticsMetrics::new(AnalyticsConfig::default())); [INFO] [stdout] | ^^^^^^^^^^^^^^^ use of undeclared type `AnalyticsConfig` [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::AnalyticsConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `RoleRequirement` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:58:21 [INFO] [stdout] | [INFO] [stdout] 58 | RoleRequirement { role: "tank".to_string(), required: true }, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::queue::RoleRequirement; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `RoleRequirement` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:59:21 [INFO] [stdout] | [INFO] [stdout] 59 | RoleRequirement { role: "healer".to_string(), required: true }, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::queue::RoleRequirement; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:100:9 [INFO] [stdout] | [INFO] [stdout] 100 | ReportType::Performance, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportFormat` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:102:9 [INFO] [stdout] | [INFO] [stdout] 102 | ReportFormat::Json, [INFO] [stdout] | ^^^^^^^^^^^^ use of undeclared type `ReportFormat` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportFormat; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:130:13 [INFO] [stdout] | [INFO] [stdout] 130 | WidgetData::KPI(kpi) => { [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `WidgetData` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::dashboard::WidgetData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:137:13 [INFO] [stdout] | [INFO] [stdout] 137 | WidgetData::Chart(chart) => { [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `WidgetData` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::dashboard::WidgetData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:143:13 [INFO] [stdout] | [INFO] [stdout] 143 | WidgetData::Alert(alerts) => { [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `WidgetData` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::dashboard::WidgetData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `WidgetData` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:146:13 [INFO] [stdout] | [INFO] [stdout] 146 | WidgetData::Insight(insights) => { [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `WidgetData` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::dashboard::WidgetData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PlayerActivityType` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:225:53 [INFO] [stdout] | [INFO] [stdout] 225 | analytics.record_player_activity(player_id, PlayerActivityType::NewPlayer).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ use of undeclared type `PlayerActivityType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PlayerActivityType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `HashMap` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:239:32 [INFO] [stdout] | [INFO] [stdout] 239 | custom_attributes: HashMap::new(), [INFO] [stdout] | ^^^^^^^ use of undeclared type `HashMap` [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use std::collections::HashMap; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:252:13 [INFO] [stdout] | [INFO] [stdout] 252 | QueueActivity::PlayerJoined, [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:261:17 [INFO] [stdout] | [INFO] [stdout] 261 | QueueActivity::MatchFound(wait_time), [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:265:30 [INFO] [stdout] | [INFO] [stdout] 265 | let match_data = MatchCompletionData { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::MatchCompletionData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:278:17 [INFO] [stdout] | [INFO] [stdout] 278 | QueueActivity::PlayerLeft(wait_time), [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:285:48 [INFO] [stdout] | [INFO] [stdout] 285 | analytics.record_party_activity(3, PartyActivity::Created).await; [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `PartyActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PartyActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:293:48 [INFO] [stdout] | [INFO] [stdout] 293 | analytics.record_party_activity(3, PartyActivity::MatchFound(true)).await; [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `PartyActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PartyActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:297:38 [INFO] [stdout] | [INFO] [stdout] 297 | analytics.record_performance(PerformanceMetric::ApiResponseTime( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:301:38 [INFO] [stdout] | [INFO] [stdout] 301 | analytics.record_performance(PerformanceMetric::DatabaseQueryTime( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:306:42 [INFO] [stdout] | [INFO] [stdout] 306 | analytics.record_performance(PerformanceMetric::MemoryUsage( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:310:42 [INFO] [stdout] | [INFO] [stdout] 310 | analytics.record_performance(PerformanceMetric::CpuUsage( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0560]: struct `matchforge::EntryMetadata` has no field named `preferred_roles` [INFO] [stdout] --> examples/analytics_dashboard.rs:233:13 [INFO] [stdout] | [INFO] [stdout] 233 | preferred_roles: vec![ [INFO] [stdout] | ^^^^^^^^^^^^^^^ `matchforge::EntryMetadata` does not have this field [INFO] [stdout] | [INFO] [stdout] = note: available fields are: `roles`, `region`, `custom` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0560]: struct `matchforge::EntryMetadata` has no field named `avoided_players` [INFO] [stdout] --> examples/analytics_dashboard.rs:238:13 [INFO] [stdout] | [INFO] [stdout] 238 | avoided_players: vec![], [INFO] [stdout] | ^^^^^^^^^^^^^^^ `matchforge::EntryMetadata` does not have this field [INFO] [stdout] | [INFO] [stdout] = note: available fields are: `roles`, `region`, `custom` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0560]: struct `matchforge::EntryMetadata` has no field named `custom_attributes` [INFO] [stdout] --> examples/analytics_dashboard.rs:239:13 [INFO] [stdout] | [INFO] [stdout] 239 | custom_attributes: HashMap::new(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ `matchforge::EntryMetadata` does not have this field [INFO] [stdout] | [INFO] [stdout] = note: available fields are: `roles`, `region`, `custom` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> examples/simple_test.rs:170:52 [INFO] [stdout] | [INFO] [stdout] 170 | let result = rate_limiter.check_rate_limit(&client_ip).await?; [INFO] [stdout] | ---------------- ^^^^^^^^^^ expected `Uuid`, found `&String` [INFO] [stdout] | | [INFO] [stdout] | arguments to this method are incorrect [INFO] [stdout] | [INFO] [stdout] note: method defined here [INFO] [stdout] --> src/security/rate_limiter.rs:64:18 [INFO] [stdout] | [INFO] [stdout] 64 | pub async fn check_rate_limit(&self, client_id: Uuid) -> RateLimitResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try` [INFO] [stdout] --> examples/simple_test.rs:170:22 [INFO] [stdout] | [INFO] [stdout] 170 | let result = rate_limiter.check_rate_limit(&client_ip).await?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `RateLimitResult` [INFO] [stdout] | [INFO] [stdout] = help: the nightly-only, unstable trait `Try` is not implemented for `RateLimitResult` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `clone` found for struct `matchforge::MatchmakingRunner` in the current scope [INFO] [stdout] --> tests/integration_tests.rs:222:29 [INFO] [stdout] | [INFO] [stdout] 222 | let runner = runner.clone(); [INFO] [stdout] | ^^^^^ method not found in `matchforge::MatchmakingRunner` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find module or crate `env_logger` in this scope [INFO] [stdout] --> examples/analytics_dashboard.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | env_logger::init(); [INFO] [stdout] | ^^^^^^^^^^ use of unresolved module or unlinked crate `env_logger` [INFO] [stdout] | [INFO] [stdout] = help: if you wanted to use a crate named `env_logger`, use `cargo add env_logger` to add it to your `Cargo.toml` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0560]: struct `matchforge::MatchConstraints` has no field named `max_rating_difference` [INFO] [stdout] --> examples/analytics_dashboard.rs:55:17 [INFO] [stdout] | [INFO] [stdout] 55 | max_rating_difference: 200, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ `matchforge::MatchConstraints` does not have this field [INFO] [stdout] | [INFO] [stdout] = note: available fields are: `max_rating_delta`, `same_region_required`, `max_wait_time_seconds`, `expansion_rate` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0560]: struct `matchforge::MatchConstraints` has no field named `max_wait_time` [INFO] [stdout] --> examples/analytics_dashboard.rs:56:17 [INFO] [stdout] | [INFO] [stdout] 56 | max_wait_time: Duration::from_secs(300), [INFO] [stdout] | ^^^^^^^^^^^^^ `matchforge::MatchConstraints` does not have this field [INFO] [stdout] | [INFO] [stdout] = note: available fields are: `max_rating_delta`, `same_region_required`, `max_wait_time_seconds`, `expansion_rate` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no method named `record_activity` found for struct `Arc` in the current scope [INFO] [stdout] --> examples/simple_test.rs:188:33 [INFO] [stdout] | [INFO] [stdout] 188 | let result = anti_abuse.record_activity(player_id, "normal_activity").await?; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: there is a method `track_activity` with a similar name [INFO] [stdout] | [INFO] [stdout] 188 - let result = anti_abuse.record_activity(player_id, "normal_activity").await?; [INFO] [stdout] 188 + let result = anti_abuse.track_activity(player_id, "normal_activity").await?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/analytics_dashboard.rs:80:60 [INFO] [stdout] | [INFO] [stdout] 80 | let insights = insight_engine.generate_insights().await?; [INFO] [stdout] | ----------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, InsightError>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/analytics_dashboard.rs:103:12 [INFO] [stdout] | [INFO] [stdout] 99 | let performance_report = report_generator.generate_report( [INFO] [stdout] | ______________________________- [INFO] [stdout] 100 | | ReportType::Performance, [INFO] [stdout] 101 | | None, [INFO] [stdout] 102 | | ReportFormat::Json, [INFO] [stdout] 103 | | ).await?; [INFO] [stdout] | | -^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | |___________| [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, ReportError>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/analytics_dashboard.rs:111:66 [INFO] [stdout] | [INFO] [stdout] 111 | let dashboard = dashboard_data.generate_dashboard(None).await?; [INFO] [stdout] | ---------------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, DashboardError>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/analytics_dashboard.rs:194:66 [INFO] [stdout] | [INFO] [stdout] 194 | let dashboard_json = serde_json::to_string_pretty(&dashboard)?; [INFO] [stdout] | ----------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, serde_json::Error>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/analytics_dashboard.rs:197:68 [INFO] [stdout] | [INFO] [stdout] 197 | tokio::fs::write("dashboard_export.json", dashboard_json).await?; [INFO] [stdout] | ---------------------------------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, futures_io::Error>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/analytics_dashboard.rs:201:64 [INFO] [stdout] | [INFO] [stdout] 201 | let insights_json = serde_json::to_string_pretty(&insights)?; [INFO] [stdout] | ---------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, serde_json::Error>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/analytics_dashboard.rs:202:66 [INFO] [stdout] | [INFO] [stdout] 202 | tokio::fs::write("insights_export.json", insights_json).await?; [INFO] [stdout] | -------------------------------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, futures_io::Error>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `party_manager` [INFO] [stdout] --> tests/integration_tests.rs:16:9 [INFO] [stdout] | [INFO] [stdout] 16 | let party_manager = Arc::new(PartyManager::new( [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_party_manager` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0277, E0308, E0422, E0433, E0560, E0599. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0277`. [INFO] [stdout] [INFO] [stderr] error: could not compile `matchforge` (example "simple_test") due to 8 previous errors [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] Some errors have detailed explanations: E0277, E0422, E0433, E0560. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0277`. [INFO] [stdout] [INFO] [stderr] error: could not compile `matchforge` (example "analytics_dashboard") due to 34 previous errors [INFO] [stdout] warning: unused variable: `player_id` [INFO] [stdout] --> tests/integration_tests.rs:269:9 [INFO] [stdout] | [INFO] [stdout] 269 | let player_id = Uuid::new_v4(); [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `format` [INFO] [stdout] --> src/analytics/reports.rs:335:9 [INFO] [stdout] | [INFO] [stdout] 335 | format: ReportFormat, [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_format` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `generation_time` [INFO] [stdout] --> src/analytics/reports.rs:361:13 [INFO] [stdout] | [INFO] [stdout] 361 | let generation_time = start_time.elapsed(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_generation_time` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0422, E0599. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0422`. [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:382:49 [INFO] [stdout] | [INFO] [stdout] 382 | async fn generate_performance_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:456:54 [INFO] [stdout] | [INFO] [stdout] 456 | async fn generate_player_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `matchforge` (test "integration_tests") due to 5 previous errors; 2 warnings emitted [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:526:53 [INFO] [stdout] | [INFO] [stdout] 526 | async fn generate_queue_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:573:54 [INFO] [stdout] | [INFO] [stdout] 573 | async fn generate_rating_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:620:53 [INFO] [stdout] | [INFO] [stdout] 620 | async fn generate_party_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:667:51 [INFO] [stdout] | [INFO] [stdout] 667 | async fn generate_system_health_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:742:56 [INFO] [stdout] | [INFO] [stdout] 742 | async fn generate_business_analytics_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_range` [INFO] [stdout] --> src/analytics/reports.rs:812:44 [INFO] [stdout] | [INFO] [stdout] 812 | async fn generate_custom_report(&self, date_range: &DateRange) -> Result { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `rating_distribution` [INFO] [stdout] --> src/analytics/reports.rs:984:40 [INFO] [stdout] | [INFO] [stdout] 984 | fn calculate_average_rating(&self, rating_distribution: &HashMap) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rating_distribution` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `AnalyticsConfig` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:22:28 [INFO] [stdout] | [INFO] [stdout] 22 | let analytics_config = AnalyticsConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::AnalyticsConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MonitoringConfig` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:35:29 [INFO] [stdout] | [INFO] [stdout] 35 | let monitoring_config = MonitoringConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::MonitoringConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `AlertThresholds` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:38:27 [INFO] [stdout] | [INFO] [stdout] 38 | alert_thresholds: AlertThresholds { [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::monitoring::AlertThresholds; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `HealthCheckConfig` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:45:24 [INFO] [stdout] | [INFO] [stdout] 45 | health_checks: HealthCheckConfig { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::monitoring::HealthCheckConfig; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `DefaultMetricsCollector` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:52:38 [INFO] [stdout] | [INFO] [stdout] 52 | let metrics_collector = Arc::new(DefaultMetricsCollector::new()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ use of undeclared type `DefaultMetricsCollector` [INFO] [stdout] | [INFO] [stdout] help: a trait with a similar name exists [INFO] [stdout] | [INFO] [stdout] 52 - let metrics_collector = Arc::new(DefaultMetricsCollector::new()); [INFO] [stdout] 52 + let metrics_collector = Arc::new(MetricsCollector::new()); [INFO] [stdout] | [INFO] [stdout] help: consider importing one of these structs [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::DefaultMetricsCollector; [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::metrics::DefaultMetricsCollector; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `MemoryEventCollector` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:53:36 [INFO] [stdout] | [INFO] [stdout] 53 | let event_collector = Arc::new(MemoryEventCollector::new(10000)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ use of undeclared type `MemoryEventCollector` [INFO] [stdout] | [INFO] [stdout] help: a trait with a similar name exists [INFO] [stdout] | [INFO] [stdout] 53 - let event_collector = Arc::new(MemoryEventCollector::new(10000)); [INFO] [stdout] 53 + let event_collector = Arc::new(EventCollector::new(10000)); [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::events::MemoryEventCollector; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:78:9 [INFO] [stdout] | [INFO] [stdout] 78 | ReportType::Performance, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:79:9 [INFO] [stdout] | [INFO] [stdout] 79 | ReportType::PlayerAnalytics, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:80:9 [INFO] [stdout] | [INFO] [stdout] 80 | ReportType::QueueAnalytics, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:81:9 [INFO] [stdout] | [INFO] [stdout] 81 | ReportType::RatingAnalytics, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:82:9 [INFO] [stdout] | [INFO] [stdout] 82 | ReportType::PartyAnalytics, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:83:9 [INFO] [stdout] | [INFO] [stdout] 83 | ReportType::SystemHealth, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:84:9 [INFO] [stdout] | [INFO] [stdout] 84 | ReportType::BusinessAnalytics, [INFO] [stdout] | ^^^^^^^^^^ use of undeclared type `ReportType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `ReportFormat` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:92:13 [INFO] [stdout] | [INFO] [stdout] 92 | ReportFormat::Json, [INFO] [stdout] | ^^^^^^^^^^^^ use of undeclared type `ReportFormat` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::ReportFormat; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PlayerActivityType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:282:57 [INFO] [stdout] | [INFO] [stdout] 282 | analytics.record_player_activity(player_id, PlayerActivityType::NewPlayer).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ use of undeclared type `PlayerActivityType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PlayerActivityType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PlayerActivityType` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:307:61 [INFO] [stdout] | [INFO] [stdout] 307 | analytics.record_player_activity(player_id, PlayerActivityType::Logout).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ use of undeclared type `PlayerActivityType` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PlayerActivityType; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:325:9 [INFO] [stdout] | [INFO] [stdout] 325 | QueueActivity::PlayerLeft(wait_time), [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:341:13 [INFO] [stdout] | [INFO] [stdout] 341 | QueueActivity::MatchFound(wait_time), [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:345:26 [INFO] [stdout] | [INFO] [stdout] 345 | let match_data = MatchCompletionData { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::MatchCompletionData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:356:13 [INFO] [stdout] | [INFO] [stdout] 356 | QueueActivity::PlayerLeft(wait_time), [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:368:9 [INFO] [stdout] | [INFO] [stdout] 368 | QueueActivity::MatchFound(wait_time), [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:372:22 [INFO] [stdout] | [INFO] [stdout] 372 | let match_data = MatchCompletionData { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::MatchCompletionData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:385:40 [INFO] [stdout] | [INFO] [stdout] 385 | analytics.record_party_activity(3, PartyActivity::Created).await; [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `PartyActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PartyActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `QueueActivity` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:390:9 [INFO] [stdout] | [INFO] [stdout] 390 | QueueActivity::MatchFound(wait_time), [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `QueueActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::QueueActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PartyActivity` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:393:40 [INFO] [stdout] | [INFO] [stdout] 393 | analytics.record_party_activity(3, PartyActivity::MatchFound(true)).await; [INFO] [stdout] | ^^^^^^^^^^^^^ use of undeclared type `PartyActivity` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PartyActivity; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0422]: cannot find struct, variant or union type `MatchCompletionData` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:396:22 [INFO] [stdout] | [INFO] [stdout] 396 | let match_data = MatchCompletionData { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing this struct [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::MatchCompletionData; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:411:38 [INFO] [stdout] | [INFO] [stdout] 411 | analytics.record_performance(PerformanceMetric::ApiResponseTime(api_time)).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:415:38 [INFO] [stdout] | [INFO] [stdout] 415 | analytics.record_performance(PerformanceMetric::DatabaseQueryTime(db_time)).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:419:38 [INFO] [stdout] | [INFO] [stdout] 419 | analytics.record_performance(PerformanceMetric::MemoryUsage( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find type `PerformanceMetric` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:425:38 [INFO] [stdout] | [INFO] [stdout] 425 | analytics.record_performance(PerformanceMetric::CpuUsage(cpu_usage)).await; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ use of undeclared type `PerformanceMetric` [INFO] [stdout] | [INFO] [stdout] help: consider importing this enum [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::PerformanceMetric; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0425]: cannot find type `MetricsSnapshot` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:452:58 [INFO] [stdout] | [INFO] [stdout] 452 | async fn generate_performance_recommendations(snapshot: &MetricsSnapshot) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing one of these structs [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::MetricsSnapshot; [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::metrics::MetricsSnapshot; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0425]: cannot find type `MetricsSnapshot` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:542:61 [INFO] [stdout] | [INFO] [stdout] 542 | fn calculate_ltv(retention: &RetentionAnalytics, snapshot: &MetricsSnapshot) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing one of these structs [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::MetricsSnapshot; [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::metrics::MetricsSnapshot; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0425]: cannot find type `MetricsSnapshot` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:557:23 [INFO] [stdout] | [INFO] [stdout] 557 | metrics_snapshot: MetricsSnapshot, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not found in this scope [INFO] [stdout] | [INFO] [stdout] help: consider importing one of these structs [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::analytics::metrics::MetricsSnapshot; [INFO] [stdout] | [INFO] [stdout] 6 + use matchforge::telemetry::metrics::MetricsSnapshot; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: cannot add `f64` to `{integer}` [INFO] [stdout] --> examples/advanced_analytics.rs:418:32 [INFO] [stdout] | [INFO] [stdout] 418 | let memory_usage = 512 + (i as f64 * 10.0).sin() * 256.0 + 512.0; // Oscillating pattern [INFO] [stdout] | ^ no implementation for `{integer} + f64` [INFO] [stdout] | [INFO] [stdout] = help: the trait `Add` is not implemented for `{integer}` [INFO] [stdout] help: the following other types implement trait `Add` [INFO] [stdout] --> /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/internal_macros.rs:22:8 [INFO] [stdout] | [INFO] [stdout] = note: `&f64` implements `Add` [INFO] [stdout] --> /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/ops/arith.rs:99:8 [INFO] [stdout] | [INFO] [stdout] = note: `f64` implements `Add` [INFO] [stdout] ::: /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/ops/arith.rs:114:0 [INFO] [stdout] | [INFO] [stdout] = note: in this macro invocation [INFO] [stdout] = note: this error originates in the macro `forward_ref_binop` which comes from the expansion of the macro `add_impl` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `snapshot` [INFO] [stdout] --> src/analytics/insights.rs:896:38 [INFO] [stdout] | [INFO] [stdout] 896 | async fn detect_anomalies(&self, snapshot: &MetricsSnapshot) -> Result, InsightError> { [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_snapshot` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no function or associated item named `from_minutes` found for struct `std::time::Duration` in the current scope [INFO] [stdout] --> examples/advanced_analytics.rs:442:76 [INFO] [stdout] | [INFO] [stdout] 442 | let session_factor = if retention.average_session_duration < Duration::from_minutes(15) { [INFO] [stdout] | ^^^^^^^^^^^^ function or associated item not found in `std::time::Duration` [INFO] [stdout] | [INFO] [stdout] note: if you're trying to build a new `std::time::Duration` consider using one of the following associated functions: [INFO] [stdout] std::time::Duration::new [INFO] [stdout] std::time::Duration::from_secs [INFO] [stdout] std::time::Duration::from_millis [INFO] [stdout] std::time::Duration::from_micros [INFO] [stdout] and 10 others [INFO] [stdout] --> /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/time.rs:194:4 [INFO] [stdout] help: there is an associated function `from_mins` with a similar name [INFO] [stdout] | [INFO] [stdout] 442 - let session_factor = if retention.average_session_duration < Duration::from_minutes(15) { [INFO] [stdout] 442 + let session_factor = if retention.average_session_duration < Duration::from_mins(15) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> examples/advanced_analytics.rs:527:36 [INFO] [stdout] | [INFO] [stdout] 527 | let player_ltv = calculate_ltv(&retention, &snapshot); [INFO] [stdout] | ------------- ^^^^^^^^^^ expected `RetentionAnalytics`, found a different `RetentionAnalytics` [INFO] [stdout] | | [INFO] [stdout] | arguments to this function are incorrect [INFO] [stdout] | [INFO] [stdout] = note: `RetentionAnalytics` and `RetentionAnalytics` have similar names, but are actually distinct types [INFO] [stdout] note: `RetentionAnalytics` is defined in crate `matchforge` [INFO] [stdout] --> src/analytics/metrics.rs:547:1 [INFO] [stdout] | [INFO] [stdout] 547 | pub struct RetentionAnalytics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: `RetentionAnalytics` is defined in the current crate [INFO] [stdout] --> examples/advanced_analytics.rs:624:1 [INFO] [stdout] | [INFO] [stdout] 624 | struct RetentionAnalytics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: function defined here [INFO] [stdout] --> examples/advanced_analytics.rs:542:4 [INFO] [stdout] | [INFO] [stdout] 542 | fn calculate_ltv(retention: &RetentionAnalytics, snapshot: &MetricsSnapshot) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^ ------------------------------ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: cannot find module or crate `env_logger` in this scope [INFO] [stdout] --> examples/advanced_analytics.rs:13:5 [INFO] [stdout] | [INFO] [stdout] 13 | env_logger::init(); [INFO] [stdout] | ^^^^^^^^^^ use of unresolved module or unlinked crate `env_logger` [INFO] [stdout] | [INFO] [stdout] = help: if you wanted to use a crate named `env_logger`, use `cargo add env_logger` to add it to your `Cargo.toml` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no function or associated item named `days` found for struct `std::time::Duration` in the current scope [INFO] [stdout] --> examples/advanced_analytics.rs:23:37 [INFO] [stdout] | [INFO] [stdout] 23 | retention_period: Duration::days(90), [INFO] [stdout] | ^^^^ function or associated item not found in `std::time::Duration` [INFO] [stdout] | [INFO] [stdout] note: if you're trying to build a new `std::time::Duration` consider using one of the following associated functions: [INFO] [stdout] std::time::Duration::new [INFO] [stdout] std::time::Duration::from_secs [INFO] [stdout] std::time::Duration::from_millis [INFO] [stdout] std::time::Duration::from_micros [INFO] [stdout] and 10 others [INFO] [stdout] --> /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/core/src/time.rs:194:4 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> examples/advanced_analytics.rs:117:32 [INFO] [stdout] | [INFO] [stdout] 117 | insights_by_type.entry(insight.insight_type.clone()) [INFO] [stdout] | ----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `InsightType`, found `matchforge::analytics::InsightType` [INFO] [stdout] | | [INFO] [stdout] | arguments to this method are incorrect [INFO] [stdout] | [INFO] [stdout] = note: `matchforge::analytics::InsightType` and `InsightType` have similar names, but are actually distinct types [INFO] [stdout] note: `matchforge::analytics::InsightType` is defined in crate `matchforge` [INFO] [stdout] --> src/analytics/insights.rs:43:1 [INFO] [stdout] | [INFO] [stdout] 43 | pub enum InsightType { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: `InsightType` is defined in the current crate [INFO] [stdout] --> examples/advanced_analytics.rs:634:1 [INFO] [stdout] | [INFO] [stdout] 634 | enum InsightType { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] help: the return type of this call is `matchforge::analytics::InsightType` due to the type of the argument passed [INFO] [stdout] --> examples/advanced_analytics.rs:117:9 [INFO] [stdout] | [INFO] [stdout] 117 | insights_by_type.entry(insight.insight_type.clone()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^----------------------------^ [INFO] [stdout] | | [INFO] [stdout] | this argument influences the return type of `entry` [INFO] [stdout] note: method defined here [INFO] [stdout] --> /rustc/dec9417b8611e34e787a3e4c37686b5131f9e5c5/library/std/src/collections/hash/map.rs:979:11 [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0658]: use of unstable library feature `duration_constructors` [INFO] [stdout] --> examples/advanced_analytics.rs:156:41 [INFO] [stdout] | [INFO] [stdout] 156 | if predicted_time_to_overflow < Duration::from_days(1) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: see issue #120301 for more information [INFO] [stdout] = help: add `#![feature(duration_constructors)]` to the crate attributes to enable [INFO] [stdout] = note: this compiler was built on 2026-03-22; consider upgrading it if it is out of date [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> examples/advanced_analytics.rs:167:43 [INFO] [stdout] | [INFO] [stdout] 167 | let churn_risk = calculate_churn_risk(&retention).await; [INFO] [stdout] | -------------------- ^^^^^^^^^^ expected `RetentionAnalytics`, found a different `RetentionAnalytics` [INFO] [stdout] | | [INFO] [stdout] | arguments to this function are incorrect [INFO] [stdout] | [INFO] [stdout] = note: `RetentionAnalytics` and `RetentionAnalytics` have similar names, but are actually distinct types [INFO] [stdout] note: `RetentionAnalytics` is defined in crate `matchforge` [INFO] [stdout] --> src/analytics/metrics.rs:547:1 [INFO] [stdout] | [INFO] [stdout] 547 | pub struct RetentionAnalytics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: `RetentionAnalytics` is defined in the current crate [INFO] [stdout] --> examples/advanced_analytics.rs:624:1 [INFO] [stdout] | [INFO] [stdout] 624 | struct RetentionAnalytics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: function defined here [INFO] [stdout] --> examples/advanced_analytics.rs:439:10 [INFO] [stdout] | [INFO] [stdout] 439 | async fn calculate_churn_risk(retention: &RetentionAnalytics) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ ------------------------------ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try` [INFO] [stdout] --> examples/advanced_analytics.rs:199:25 [INFO] [stdout] | [INFO] [stdout] 199 | let health_status = monitoring_service.get_system_health().await?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `matchforge::telemetry::monitoring::SystemHealth` [INFO] [stdout] | [INFO] [stdout] = help: the nightly-only, unstable trait `Try` is not implemented for `matchforge::telemetry::monitoring::SystemHealth` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try` [INFO] [stdout] --> examples/advanced_analytics.rs:209:18 [INFO] [stdout] | [INFO] [stdout] 209 | let alerts = monitoring_service.get_alerts().await?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `?` operator cannot be applied to type `Vec` [INFO] [stdout] | [INFO] [stdout] = help: the nightly-only, unstable trait `Try` is not implemented for `Vec` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> examples/advanced_analytics.rs:227:9 [INFO] [stdout] | [INFO] [stdout] 227 | insights, [INFO] [stdout] | ^^^^^^^^ expected `Insight`, found `matchforge::analytics::insights::Insight` [INFO] [stdout] | [INFO] [stdout] = note: `matchforge::analytics::insights::Insight` and `Insight` have similar names, but are actually distinct types [INFO] [stdout] note: `matchforge::analytics::insights::Insight` is defined in crate `matchforge` [INFO] [stdout] --> src/analytics/insights.rs:68:1 [INFO] [stdout] | [INFO] [stdout] 68 | pub struct Insight { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: `Insight` is defined in the current crate [INFO] [stdout] --> examples/advanced_analytics.rs:589:1 [INFO] [stdout] | [INFO] [stdout] 589 | struct Insight { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> examples/advanced_analytics.rs:228:9 [INFO] [stdout] | [INFO] [stdout] 95 | reports.push(report.clone()); [INFO] [stdout] | ------- -------------- this argument has type `matchforge::analytics::reports::Report`... [INFO] [stdout] | | [INFO] [stdout] | ... which causes `reports` to have type `Vec` [INFO] [stdout] ... [INFO] [stdout] 228 | reports, [INFO] [stdout] | ^^^^^^^ expected `Report`, found `matchforge::analytics::reports::Report` [INFO] [stdout] | [INFO] [stdout] = note: `matchforge::analytics::reports::Report` and `Report` have similar names, but are actually distinct types [INFO] [stdout] note: `matchforge::analytics::reports::Report` is defined in crate `matchforge` [INFO] [stdout] --> src/analytics/reports.rs:103:1 [INFO] [stdout] | [INFO] [stdout] 103 | pub struct Report { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: `Report` is defined in the current crate [INFO] [stdout] --> examples/advanced_analytics.rs:572:1 [INFO] [stdout] | [INFO] [stdout] 572 | struct Report { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> examples/advanced_analytics.rs:230:30 [INFO] [stdout] | [INFO] [stdout] 230 | retention_analytics: retention, [INFO] [stdout] | ^^^^^^^^^ expected `RetentionAnalytics`, found a different `RetentionAnalytics` [INFO] [stdout] | [INFO] [stdout] = note: `RetentionAnalytics` and `RetentionAnalytics` have similar names, but are actually distinct types [INFO] [stdout] note: `RetentionAnalytics` is defined in crate `matchforge` [INFO] [stdout] --> src/analytics/metrics.rs:547:1 [INFO] [stdout] | [INFO] [stdout] 547 | pub struct RetentionAnalytics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] note: `RetentionAnalytics` is defined in the current crate [INFO] [stdout] --> examples/advanced_analytics.rs:624:1 [INFO] [stdout] | [INFO] [stdout] 624 | struct RetentionAnalytics { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/advanced_analytics.rs:93:16 [INFO] [stdout] | [INFO] [stdout] 89 | let report = report_generator.generate_report( [INFO] [stdout] | ______________________- [INFO] [stdout] 90 | | report_type.clone(), [INFO] [stdout] 91 | | None, [INFO] [stdout] 92 | | ReportFormat::Json, [INFO] [stdout] 93 | | ).await?; [INFO] [stdout] | | -^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | |_______________| [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, ReportError>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/advanced_analytics.rs:112:60 [INFO] [stdout] | [INFO] [stdout] 112 | let insights = insight_engine.generate_insights().await?; [INFO] [stdout] | ----------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, InsightError>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/advanced_analytics.rs:235:65 [INFO] [stdout] | [INFO] [stdout] 235 | let export_json = serde_json::to_string_pretty(&export_data)?; [INFO] [stdout] | ------------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, serde_json::Error>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: `?` couldn't convert the error to `MatchForgeError` [INFO] [stdout] --> examples/advanced_analytics.rs:236:74 [INFO] [stdout] | [INFO] [stdout] 236 | tokio::fs::write("advanced_analytics_export.json", export_json).await?; [INFO] [stdout] | ---------------------------------------------------------------------^ the trait `From` is not implemented for `MatchForgeError` [INFO] [stdout] | | [INFO] [stdout] | this can't be annotated with `?` because it has type `Result<_, futures_io::Error>` [INFO] [stdout] | [INFO] [stdout] = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `analytics` [INFO] [stdout] --> examples/advanced_analytics.rs:432:32 [INFO] [stdout] | [INFO] [stdout] 432 | async fn calculate_growth_rate(analytics: &AnalyticsMetrics) -> f64 { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_analytics` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0277, E0308, E0422, E0425, E0433, E0599, E0658. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0277`. [INFO] [stdout] [INFO] [stderr] error: could not compile `matchforge` (example "advanced_analytics") due to 50 previous errors; 1 warning emitted [INFO] [stdout] warning: unused variable: `time_range` [INFO] [stdout] --> src/analytics/dashboard.rs:603:38 [INFO] [stdout] | [INFO] [stdout] 603 | async fn generate_widgets(&self, time_range: &TimeRange) -> Result, DashboardError> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_time_range` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `connection_string` [INFO] [stdout] --> src/persistence/redis.rs:118:22 [INFO] [stdout] | [INFO] [stdout] 118 | pub async fn new(connection_string: &str) -> Result { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_connection_string` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ip` [INFO] [stdout] --> src/security/security.rs:199:28 [INFO] [stdout] | [INFO] [stdout] 199 | } else if let Some(ip) = &request.remote_addr { [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_ip` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hash` [INFO] [stdout] --> src/security/security.rs:201:17 [INFO] [stdout] | [INFO] [stdout] 201 | let hash = std::collections::hash_map::DefaultHasher::new(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `session_id` [INFO] [stdout] --> src/security/security.rs:236:32 [INFO] [stdout] | [INFO] [stdout] 236 | fn validate_session(&self, session_id: &str) -> Result, SecurityError> { [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_session_id` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `matches_per_hour`, `rating_accuracy`, `solo_vs_party_win_rates`, and `daily_metrics` are never read [INFO] [stdout] --> src/analytics/metrics.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct AnalyticsMetrics { [INFO] [stdout] | ---------------- fields in this struct [INFO] [stdout] ... [INFO] [stdout] 24 | matches_per_hour: AtomicU64, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 37 | rating_accuracy: AtomicI64, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | solo_vs_party_win_rates: Arc>>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 58 | daily_metrics: Arc>>, [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 `ml_models` is never read [INFO] [stdout] --> src/analytics/insights.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct InsightEngine { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 19 | ml_models: Arc>>, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `model_type`, `accuracy`, `last_trained`, and `training_data_size` are never read [INFO] [stdout] --> src/analytics/insights.rs:176:5 [INFO] [stdout] | [INFO] [stdout] 175 | struct MLModel { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 176 | model_type: ModelType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 177 | accuracy: f64, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 178 | last_trained: DateTime, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 179 | training_data_size: usize, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `MLModel` 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 `LinearRegression`, `TimeSeries`, `AnomalyDetection`, `Clustering`, and `Classification` are never constructed [INFO] [stdout] --> src/analytics/insights.rs:185:5 [INFO] [stdout] | [INFO] [stdout] 184 | enum ModelType { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 185 | LinearRegression, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 186 | TimeSeries, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 187 | AnomalyDetection, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 188 | Clustering, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] 189 | Classification, [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `ModelType` 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 `report_generator` is never read [INFO] [stdout] --> src/analytics/dashboard.rs:17:5 [INFO] [stdout] | [INFO] [stdout] 15 | pub struct DashboardData { [INFO] [stdout] | ------------- field in this struct [INFO] [stdout] 16 | analytics: Arc, [INFO] [stdout] 17 | report_generator: Arc, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `tau` is never read [INFO] [stdout] --> src/mmr/algorithm.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 63 | pub struct Glicko2Algorithm { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] 64 | tau: f64, // System volatility constant [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `calculate_match_quality` is never used [INFO] [stdout] --> src/queue/advanced_strategies.rs:136:8 [INFO] [stdout] | [INFO] [stdout] 21 | impl SwissMatcher { [INFO] [stdout] | ----------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 136 | fn calculate_match_quality( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `constraints_satisfied` is never used [INFO] [stdout] --> src/queue/advanced_strategies.rs:416:8 [INFO] [stdout] | [INFO] [stdout] 355 | impl AdaptiveMatcher { [INFO] [stdout] | -------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 416 | fn constraints_satisfied(&self, entry: &QueueEntry, constraints: &MatchConstraints) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `rate_limiter` is never read [INFO] [stdout] --> src/security/anti_abuse.rs:18:5 [INFO] [stdout] | [INFO] [stdout] 16 | pub struct AntiAbuseSystem { [INFO] [stdout] | --------------- field in this struct [INFO] [stdout] 17 | config: AntiAbuseConfig, [INFO] [stdout] 18 | rate_limiter: RateLimiter, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `player_id`, `reports_received`, `reports_made`, `matches_abandoned`, and `suspicious_activities` are never read [INFO] [stdout] --> src/security/anti_abuse.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 127 | struct PlayerBehavior { [INFO] [stdout] | -------------- fields in this struct [INFO] [stdout] 128 | player_id: Uuid, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 132 | reports_received: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] 133 | reports_made: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] 134 | matches_abandoned: Vec>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] 135 | suspicious_activities: Vec, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `PlayerBehavior` 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 `event_type` is never read [INFO] [stdout] --> src/telemetry/events.rs:351:5 [INFO] [stdout] | [INFO] [stdout] 350 | pub struct EventBuilder { [INFO] [stdout] | ------------ field in this struct [INFO] [stdout] 351 | event_type: EventType, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:19:5 [INFO] [stdout] | [INFO] [stdout] 19 | async fn get(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] = note: `#[warn(async_fn_in_trait)]` on by default [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 19 - async fn get(&mut self, key: &str) -> Result; [INFO] [stdout] 19 + fn get(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:20:5 [INFO] [stdout] | [INFO] [stdout] 20 | async fn set(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 20 - async fn set(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] 20 + fn set(&mut self, key: &str, value: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:21:5 [INFO] [stdout] | [INFO] [stdout] 21 | async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 21 - async fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> Result<()>; [INFO] [stdout] 21 + fn set_ex(&mut self, key: &str, value: &str, seconds: usize) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:22:5 [INFO] [stdout] | [INFO] [stdout] 22 | async fn del(&mut self, key: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 22 - async fn del(&mut self, key: &str) -> Result<()>; [INFO] [stdout] 22 + fn del(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | async fn sadd(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 23 - async fn sadd(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 23 + fn sadd(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | async fn srem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 24 - async fn srem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 24 + fn srem(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 25 | async fn smembers(&mut self, key: &str) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 25 - async fn smembers(&mut self, key: &str) -> Result>; [INFO] [stdout] 25 + fn smembers(&mut self, key: &str) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | async fn lpush(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 26 - async fn lpush(&mut self, key: &str, value: &str) -> Result<()>; [INFO] [stdout] 26 + fn lpush(&mut self, key: &str, value: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 27 - async fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> Result<()>; [INFO] [stdout] 27 + fn ltrim(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 28 | async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 28 - async fn zadd(&mut self, key: &str, score: f64, member: &str) -> Result<()>; [INFO] [stdout] 28 + fn zadd(&mut self, key: &str, score: f64, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | async fn zrem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 29 - async fn zrem(&mut self, key: &str, member: &str) -> Result<()>; [INFO] [stdout] 29 + fn zrem(&mut self, key: &str, member: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 30 | async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 30 - async fn zrange(&mut self, key: &str, start: isize, stop: isize) -> Result>; [INFO] [stdout] 30 + fn zrange(&mut self, key: &str, start: isize, stop: isize) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 31 | async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 31 - async fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> Result>; [INFO] [stdout] 31 + fn zrangebyscore(&mut self, key: &str, min: f64, max: f64) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | async fn keys(&mut self, pattern: &str) -> Result>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 32 - async fn keys(&mut self, pattern: &str) -> Result>; [INFO] [stdout] 32 + fn keys(&mut self, pattern: &str) -> impl std::future::Future>> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:33:5 [INFO] [stdout] | [INFO] [stdout] 33 | async fn zcard(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 33 - async fn zcard(&mut self, key: &str) -> Result; [INFO] [stdout] 33 + fn zcard(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:34:5 [INFO] [stdout] | [INFO] [stdout] 34 | async fn llen(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 34 - async fn llen(&mut self, key: &str) -> Result; [INFO] [stdout] 34 + fn llen(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified [INFO] [stdout] --> src/persistence/redis.rs:35:5 [INFO] [stdout] | [INFO] [stdout] 35 | async fn exists(&mut self, key: &str) -> Result; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future` [INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change [INFO] [stdout] | [INFO] [stdout] 35 - async fn exists(&mut self, key: &str) -> Result; [INFO] [stdout] 35 + fn exists(&mut self, key: &str) -> impl std::future::Future> + Send; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "0e9e640061afda1395842b68c93e4e9c7b22e4ce03e1e76b3af30c43e2ba3398", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0e9e640061afda1395842b68c93e4e9c7b22e4ce03e1e76b3af30c43e2ba3398", kill_on_drop: false }` [INFO] [stdout] 0e9e640061afda1395842b68c93e4e9c7b22e4ce03e1e76b3af30c43e2ba3398