[INFO] cloning repository https://github.com/espehel/vincite-engine
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/espehel/vincite-engine" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fespehel%2Fvincite-engine", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fespehel%2Fvincite-engine'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] dc817db726d334fd83e9c52ff5077738c8691f04
[INFO] checking espehel/vincite-engine against 3154cc1a3e6424e44f438a95007d043ed5ceaaf6 for pr-133502-30
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fespehel%2Fvincite-engine" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/espehel/vincite-engine
[INFO] finished tweaking git repo https://github.com/espehel/vincite-engine
[INFO] tweaked toml for git repo https://github.com/espehel/vincite-engine written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/espehel/vincite-engine on toolchain 3154cc1a3e6424e44f438a95007d043ed5ceaaf6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/espehel/vincite-engine 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" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b
[INFO] running `Command { std: "docker" "start" "1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b" "/opt/rustwide/cargo-home/bin/cargo" "+3154cc1a3e6424e44f438a95007d043ed5ceaaf6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling generic-array v0.14.9
[INFO] [stderr]    Compiling writeable v0.6.4
[INFO] [stderr]    Compiling litemap v0.8.3
[INFO] [stderr]    Compiling syn v3.0.4
[INFO] [stderr]    Compiling cmov v0.5.4
[INFO] [stderr]    Compiling time-macros v0.2.32
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]     Checking hybrid-array v0.4.14
[INFO] [stderr]     Checking futures-sink v0.3.34
[INFO] [stderr]    Compiling futures-core v0.3.34
[INFO] [stderr]    Compiling mio v1.2.2
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling rand_core v0.10.1
[INFO] [stderr]    Compiling ctutils v0.4.2
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]    Compiling crossbeam-utils v0.8.22
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling futures-io v0.3.34
[INFO] [stderr]    Compiling digest v0.11.3
[INFO] [stderr]    Compiling futures-task v0.3.34
[INFO] [stderr]    Compiling event-listener v5.4.2
[INFO] [stderr]     Checking futures-util v0.3.34
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling crypto-common v0.1.6
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling hmac v0.13.0
[INFO] [stderr]    Compiling chacha20 v0.10.1
[INFO] [stderr]    Compiling hashlink v0.11.1
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]     Checking futures-channel v0.3.34
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling crossbeam-queue v0.3.13
[INFO] [stderr]    Compiling uuid v1.25.0
[INFO] [stderr]    Compiling hkdf v0.13.0
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling sha2 v0.11.0
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling md-5 v0.11.0
[INFO] [stderr]     Checking block-buffer v0.12.1
[INFO] [stderr]     Checking crypto-common v0.2.2
[INFO] [stderr]    Compiling whoami v2.1.3
[INFO] [stderr]     Checking http-body-util v0.1.5
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking axum-core v0.5.6
[INFO] [stderr]    Compiling time v0.3.55
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling zerovec-derive v0.11.6
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling zerovec v0.11.8
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling icu_collections v2.3.0
[INFO] [stderr]    Compiling tokio-stream v0.1.19
[INFO] [stderr]    Compiling icu_locale_core v2.3.0
[INFO] [stderr]     Checking serde v1.0.229
[INFO] [stderr]     Checking icu_provider v2.3.1
[INFO] [stderr]     Checking smallvec v1.15.2
[INFO] [stderr]     Checking either v1.18.0
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking tracing-subscriber v0.3.23
[INFO] [stderr]     Checking icu_normalizer v2.3.0
[INFO] [stderr]     Checking icu_properties v2.3.0
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking futures-intrusive v0.5.0
[INFO] [stderr]     Checking idna_adapter v1.2.2
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]    Compiling sqlx-core v0.9.0
[INFO] [stderr]     Checking hyper v1.11.0
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking axum v0.8.9
[INFO] [stderr]    Compiling sqlx-postgres v0.9.0
[INFO] [stderr]    Compiling sqlx-macros-core v0.9.0
[INFO] [stderr]    Compiling sqlx-macros v0.9.0
[INFO] [stderr]     Checking sqlx v0.9.0
[INFO] [stderr]     Checking vincite v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error: expected `;`, found `event`
[INFO] [stdout]    --> src/game/game.rs:252:57
[INFO] [stdout]     |
[INFO] [stdout] 252 |         rules::process_event(self.state.as_mut(), event)
[INFO] [stdout]     |                                                         ^ help: add `;` here
[INFO] [stdout] 253 |             event.processed_at
[INFO] [stdout]     |             ----- unexpected token
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected `;`, found `Ok`
[INFO] [stdout]    --> src/game/game.rs:253:31
[INFO] [stdout]     |
[INFO] [stdout] 253 |             event.processed_at
[INFO] [stdout]     |                               ^ help: add `;` here
[INFO] [stdout] 254 |         Ok(event)
[INFO] [stdout]     |         -- unexpected token
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected `;`, found keyword `let`
[INFO] [stdout]    --> src/game/game.rs:264:28
[INFO] [stdout]     |
[INFO] [stdout] 264 |         self.advanceTo(now)
[INFO] [stdout]     |                            ^ help: add `;` here
[INFO] [stdout] 265 |
[INFO] [stdout] 266 |         let new_events = rules::execute_command(self.state.as_mut(), command)
[INFO] [stdout]     |         --- unexpected token
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected `;`, found `event`
[INFO] [stdout]    --> src/game/game.rs:252:57
[INFO] [stdout]     |
[INFO] [stdout] 252 |         rules::process_event(self.state.as_mut(), event)
[INFO] [stdout]     |                                                         ^ help: add `;` here
[INFO] [stdout] 253 |             event.processed_at
[INFO] [stdout]     |             ----- unexpected token
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected `;`, found `Ok`
[INFO] [stdout]    --> src/game/game.rs:253:31
[INFO] [stdout]     |
[INFO] [stdout] 253 |             event.processed_at
[INFO] [stdout]     |                               ^ help: add `;` here
[INFO] [stdout] 254 |         Ok(event)
[INFO] [stdout]     |         -- unexpected token
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected `;`, found keyword `let`
[INFO] [stdout]    --> src/game/game.rs:264:28
[INFO] [stdout]     |
[INFO] [stdout] 264 |         self.advanceTo(now)
[INFO] [stdout]     |                            ^ help: add `;` here
[INFO] [stdout] 265 |
[INFO] [stdout] 266 |         let new_events = rules::execute_command(self.state.as_mut(), command)
[INFO] [stdout]     |         --- unexpected token
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]   --> src/db/queries.rs:40:21
[INFO] [stdout]    |
[INFO] [stdout] 40 |       let game_rows = query_as!(
[INFO] [stdout]    |  _____________________^
[INFO] [stdout] 41 | |         GameRow,
[INFO] [stdout] 42 | |         r#"
[INFO] [stdout] 43 | |         SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 44 | |         FROM games
[INFO] [stdout] 45 | |         "#
[INFO] [stdout] 46 | |     )
[INFO] [stdout]    | |_____^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]   --> src/db/queries.rs:52:23
[INFO] [stdout]    |
[INFO] [stdout] 52 |       let player_rows = query_as!(
[INFO] [stdout]    |  _______________________^
[INFO] [stdout] 53 | |         GamePlayerRow,
[INFO] [stdout] 54 | |         r#"
[INFO] [stdout] 55 | |         SELECT gp.game_id, p.id, p.name, gp.is_host
[INFO] [stdout] ...  |
[INFO] [stdout] 61 | |         &game_ids
[INFO] [stdout] 62 | |     )
[INFO] [stdout]    | |_____^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]   --> src/db/queries.rs:84:20
[INFO] [stdout]    |
[INFO] [stdout] 84 |       let game_row = query_as!(
[INFO] [stdout]    |  ____________________^
[INFO] [stdout] 85 | |         GameRow,
[INFO] [stdout] 86 | |         r#"
[INFO] [stdout] 87 | |         SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] ...  |
[INFO] [stdout] 91 | |         id.to_uuid()
[INFO] [stdout] 92 | |     )
[INFO] [stdout]    | |_____^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:108:16
[INFO] [stdout]     |
[INFO] [stdout] 108 |       let rows = query_as!(
[INFO] [stdout]     |  ________________^
[INFO] [stdout] 109 | |         GamePlayerRow,
[INFO] [stdout] 110 | |         r#"
[INFO] [stdout] 111 | |         SELECT gp.game_id, p.id, p.name, gp.is_host
[INFO] [stdout] ...   |
[INFO] [stdout] 117 | |         game_id.to_uuid()
[INFO] [stdout] 118 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:128:20
[INFO] [stdout]     |
[INFO] [stdout] 128 |       let game_row = query_as!(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 129 | |         GameRow,
[INFO] [stdout] 130 | |         r#"SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 131 | |            FROM games WHERE id = $1
[INFO] [stdout] 132 | |            FOR UPDATE "#,
[INFO] [stdout] 133 | |         game_id.to_uuid()
[INFO] [stdout] 134 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:149:5
[INFO] [stdout]     |
[INFO] [stdout] 149 | /     query!(
[INFO] [stdout] 150 | |         r#"UPDATE games SET status = $2, state = $3, started_at = $4 WHERE id = $1"#,
[INFO] [stdout] 151 | |         game.id.to_uuid(),
[INFO] [stdout] 152 | |         game.status.as_str(),
[INFO] [stdout] 153 | |         serde_json::to_value(game.persisted_state()).map_err(AppError::unexpected)?,
[INFO] [stdout] 154 | |         game.started_at
[INFO] [stdout] 155 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 | /     sqlx::query!(
[INFO] [stdout] 174 | |         r#"
[INFO] [stdout] 175 | |         INSERT INTO games (
[INFO] [stdout] 176 | |             id,
[INFO] [stdout] ...   |
[INFO] [stdout] 188 | |         game.created_at,
[INFO] [stdout] 189 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `sqlx::query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:193:5
[INFO] [stdout]     |
[INFO] [stdout] 193 | /     sqlx::query!(
[INFO] [stdout] 194 | |         r#"
[INFO] [stdout] 195 | |         INSERT INTO game_players (game_id, player_id, is_host)
[INFO] [stdout] 196 | |         SELECT $1, player_id, player_id = $3
[INFO] [stdout] ...   |
[INFO] [stdout] 201 | |         game.host.to_uuid(),
[INFO] [stdout] 202 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `sqlx::query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:212:5
[INFO] [stdout]     |
[INFO] [stdout] 212 | /     query!(
[INFO] [stdout] 213 | |         r#"
[INFO] [stdout] 214 | |         INSERT INTO players (id, name)
[INFO] [stdout] 215 | |         VALUES ($1, $2)
[INFO] [stdout] ...   |
[INFO] [stdout] 218 | |         player.name.as_str(),
[INFO] [stdout] 219 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:230:15
[INFO] [stdout]     |
[INFO] [stdout] 230 |       let row = query_as!(
[INFO] [stdout]     |  _______________^
[INFO] [stdout] 231 | |         PlayerRow,
[INFO] [stdout] 232 | |         r#"
[INFO] [stdout] 233 | |         SELECT id, name
[INFO] [stdout] ...   |
[INFO] [stdout] 237 | |         player_id.to_uuid()
[INFO] [stdout] 238 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:255:15
[INFO] [stdout]     |
[INFO] [stdout] 255 |       let row = query_as!(
[INFO] [stdout]     |  _______________^
[INFO] [stdout] 256 | |         PlayerRow,
[INFO] [stdout] 257 | |         r#"
[INFO] [stdout] 258 | |         SELECT p.id, p.name
[INFO] [stdout] ...   |
[INFO] [stdout] 264 | |         player_id.to_uuid()
[INFO] [stdout] 265 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:286:5
[INFO] [stdout]     |
[INFO] [stdout] 286 | /     query!(
[INFO] [stdout] 287 | |         r#"
[INFO] [stdout] 288 | |         INSERT INTO game_players (game_id, player_id, is_host)
[INFO] [stdout] 289 | |         VALUES ($1, $2, FALSE)
[INFO] [stdout] ...   |
[INFO] [stdout] 292 | |         player_id.to_uuid(),
[INFO] [stdout] 293 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]   --> src/db/queries.rs:40:21
[INFO] [stdout]    |
[INFO] [stdout] 40 |       let game_rows = query_as!(
[INFO] [stdout]    |  _____________________^
[INFO] [stdout] 41 | |         GameRow,
[INFO] [stdout] 42 | |         r#"
[INFO] [stdout] 43 | |         SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 44 | |         FROM games
[INFO] [stdout] 45 | |         "#
[INFO] [stdout] 46 | |     )
[INFO] [stdout]    | |_____^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]   --> src/db/queries.rs:52:23
[INFO] [stdout]    |
[INFO] [stdout] 52 |       let player_rows = query_as!(
[INFO] [stdout]    |  _______________________^
[INFO] [stdout] 53 | |         GamePlayerRow,
[INFO] [stdout] 54 | |         r#"
[INFO] [stdout] 55 | |         SELECT gp.game_id, p.id, p.name, gp.is_host
[INFO] [stdout] ...  |
[INFO] [stdout] 61 | |         &game_ids
[INFO] [stdout] 62 | |     )
[INFO] [stdout]    | |_____^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]   --> src/db/queries.rs:84:20
[INFO] [stdout]    |
[INFO] [stdout] 84 |       let game_row = query_as!(
[INFO] [stdout]    |  ____________________^
[INFO] [stdout] 85 | |         GameRow,
[INFO] [stdout] 86 | |         r#"
[INFO] [stdout] 87 | |         SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] ...  |
[INFO] [stdout] 91 | |         id.to_uuid()
[INFO] [stdout] 92 | |     )
[INFO] [stdout]    | |_____^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:108:16
[INFO] [stdout]     |
[INFO] [stdout] 108 |       let rows = query_as!(
[INFO] [stdout]     |  ________________^
[INFO] [stdout] 109 | |         GamePlayerRow,
[INFO] [stdout] 110 | |         r#"
[INFO] [stdout] 111 | |         SELECT gp.game_id, p.id, p.name, gp.is_host
[INFO] [stdout] ...   |
[INFO] [stdout] 117 | |         game_id.to_uuid()
[INFO] [stdout] 118 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:128:20
[INFO] [stdout]     |
[INFO] [stdout] 128 |       let game_row = query_as!(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 129 | |         GameRow,
[INFO] [stdout] 130 | |         r#"SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 131 | |            FROM games WHERE id = $1
[INFO] [stdout] 132 | |            FOR UPDATE "#,
[INFO] [stdout] 133 | |         game_id.to_uuid()
[INFO] [stdout] 134 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:149:5
[INFO] [stdout]     |
[INFO] [stdout] 149 | /     query!(
[INFO] [stdout] 150 | |         r#"UPDATE games SET status = $2, state = $3, started_at = $4 WHERE id = $1"#,
[INFO] [stdout] 151 | |         game.id.to_uuid(),
[INFO] [stdout] 152 | |         game.status.as_str(),
[INFO] [stdout] 153 | |         serde_json::to_value(game.persisted_state()).map_err(AppError::unexpected)?,
[INFO] [stdout] 154 | |         game.started_at
[INFO] [stdout] 155 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 | /     sqlx::query!(
[INFO] [stdout] 174 | |         r#"
[INFO] [stdout] 175 | |         INSERT INTO games (
[INFO] [stdout] 176 | |             id,
[INFO] [stdout] ...   |
[INFO] [stdout] 188 | |         game.created_at,
[INFO] [stdout] 189 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `sqlx::query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:193:5
[INFO] [stdout]     |
[INFO] [stdout] 193 | /     sqlx::query!(
[INFO] [stdout] 194 | |         r#"
[INFO] [stdout] 195 | |         INSERT INTO game_players (game_id, player_id, is_host)
[INFO] [stdout] 196 | |         SELECT $1, player_id, player_id = $3
[INFO] [stdout] ...   |
[INFO] [stdout] 201 | |         game.host.to_uuid(),
[INFO] [stdout] 202 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `sqlx::query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:212:5
[INFO] [stdout]     |
[INFO] [stdout] 212 | /     query!(
[INFO] [stdout] 213 | |         r#"
[INFO] [stdout] 214 | |         INSERT INTO players (id, name)
[INFO] [stdout] 215 | |         VALUES ($1, $2)
[INFO] [stdout] ...   |
[INFO] [stdout] 218 | |         player.name.as_str(),
[INFO] [stdout] 219 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:230:15
[INFO] [stdout]     |
[INFO] [stdout] 230 |       let row = query_as!(
[INFO] [stdout]     |  _______________^
[INFO] [stdout] 231 | |         PlayerRow,
[INFO] [stdout] 232 | |         r#"
[INFO] [stdout] 233 | |         SELECT id, name
[INFO] [stdout] ...   |
[INFO] [stdout] 237 | |         player_id.to_uuid()
[INFO] [stdout] 238 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:255:15
[INFO] [stdout]     |
[INFO] [stdout] 255 |       let row = query_as!(
[INFO] [stdout]     |  _______________^
[INFO] [stdout] 256 | |         PlayerRow,
[INFO] [stdout] 257 | |         r#"
[INFO] [stdout] 258 | |         SELECT p.id, p.name
[INFO] [stdout] ...   |
[INFO] [stdout] 264 | |         player_id.to_uuid()
[INFO] [stdout] 265 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query_as` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: set `DATABASE_URL` to use query macros online, or run `cargo sqlx prepare` to update the query cache
[INFO] [stdout]    --> src/db/queries.rs:286:5
[INFO] [stdout]     |
[INFO] [stdout] 286 | /     query!(
[INFO] [stdout] 287 | |         r#"
[INFO] [stdout] 288 | |         INSERT INTO game_players (game_id, player_id, is_host)
[INFO] [stdout] 289 | |         VALUES ($1, $2, FALSE)
[INFO] [stdout] ...   |
[INFO] [stdout] 292 | |         player_id.to_uuid(),
[INFO] [stdout] 293 | |     )
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `$crate::sqlx_macros::expand_query` which comes from the expansion of the macro `query` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::queries`
[INFO] [stdout]  --> src/api/player_router.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::queries;
[INFO] [stdout]   |     ^^^^^^^-------
[INFO] [stdout]   |            |
[INFO] [stdout]   |            no `queries` in the root
[INFO] [stdout]   |
[INFO] [stdout] help: consider importing this module instead
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::db::queries;
[INFO] [stdout]   |            ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `request`
[INFO] [stdout]   --> src/api/game_router.rs:10:30
[INFO] [stdout]    |
[INFO] [stdout] 10 | use axum::http::{StatusCode, request};
[INFO] [stdout]    |                              ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]   --> src/api/game_router.rs:95:10
[INFO] [stdout]    |
[INFO] [stdout] 95 |     Path((game_id)): Path<GameId>,
[INFO] [stdout]    |          ^       ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 95 -     Path((game_id)): Path<GameId>,
[INFO] [stdout] 95 +     Path(game_id): Path<GameId>,
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PlayerRow`
[INFO] [stdout]  --> src/db/queries.rs:1:68
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::db::row_structs::{GameEventRow, GamePlayerRow, GameRow, PlayerRow};
[INFO] [stdout]   |                                                                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `GameEventData`
[INFO] [stdout]  --> src/game/game.rs:3:37
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::game::event::{GameEvent, GameEventData, NewGameEvent};
[INFO] [stdout]   |                                     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SignedDuration`
[INFO] [stdout]  --> src/game/game.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | use time::{OffsetDateTime, SignedDuration};
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/game/game.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 220 |         if (!self.players.iter().any(|p| p.id == player_id)) {
[INFO] [stdout]     |            ^                                               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 220 -         if (!self.players.iter().any(|p| p.id == player_id)) {
[INFO] [stdout] 220 +         if !self.players.iter().any(|p| p.id == player_id) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Player`
[INFO] [stdout]  --> src/game/rules.rs:4:25
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::game::game::{Player, PlayerId};
[INFO] [stdout]   |                         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/game/rules.rs:212:13
[INFO] [stdout]     |
[INFO] [stdout] 212 | ) -> Result<(Vec<ScheduledEvent>), AppError> {
[INFO] [stdout]     |             ^                   ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 212 - ) -> Result<(Vec<ScheduledEvent>), AppError> {
[INFO] [stdout] 212 + ) -> Result<Vec<ScheduledEvent>, AppError> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `crate::queries`
[INFO] [stdout]  --> src/api/player_router.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::queries;
[INFO] [stdout]   |     ^^^^^^^-------
[INFO] [stdout]   |            |
[INFO] [stdout]   |            no `queries` in the root
[INFO] [stdout]   |
[INFO] [stdout] help: consider importing this module instead
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::db::queries;
[INFO] [stdout]   |            ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `request`
[INFO] [stdout]   --> src/api/game_router.rs:10:30
[INFO] [stdout]    |
[INFO] [stdout] 10 | use axum::http::{StatusCode, request};
[INFO] [stdout]    |                              ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around pattern
[INFO] [stdout]   --> src/api/game_router.rs:95:10
[INFO] [stdout]    |
[INFO] [stdout] 95 |     Path((game_id)): Path<GameId>,
[INFO] [stdout]    |          ^       ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 95 -     Path((game_id)): Path<GameId>,
[INFO] [stdout] 95 +     Path(game_id): Path<GameId>,
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PlayerRow`
[INFO] [stdout]  --> src/db/queries.rs:1:68
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::db::row_structs::{GameEventRow, GamePlayerRow, GameRow, PlayerRow};
[INFO] [stdout]   |                                                                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `GameEventData`
[INFO] [stdout]  --> src/game/game.rs:3:37
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::game::event::{GameEvent, GameEventData, NewGameEvent};
[INFO] [stdout]   |                                     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SignedDuration`
[INFO] [stdout]  --> src/game/game.rs:7:28
[INFO] [stdout]   |
[INFO] [stdout] 7 | use time::{OffsetDateTime, SignedDuration};
[INFO] [stdout]   |                            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/game/game.rs:220:12
[INFO] [stdout]     |
[INFO] [stdout] 220 |         if (!self.players.iter().any(|p| p.id == player_id)) {
[INFO] [stdout]     |            ^                                               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 220 -         if (!self.players.iter().any(|p| p.id == player_id)) {
[INFO] [stdout] 220 +         if !self.players.iter().any(|p| p.id == player_id) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Player`
[INFO] [stdout]  --> src/game/rules.rs:4:25
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::game::game::{Player, PlayerId};
[INFO] [stdout]   |                         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/game/rules.rs:212:13
[INFO] [stdout]     |
[INFO] [stdout] 212 | ) -> Result<(Vec<ScheduledEvent>), AppError> {
[INFO] [stdout]     |             ^                   ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 212 - ) -> Result<(Vec<ScheduledEvent>), AppError> {
[INFO] [stdout] 212 + ) -> Result<Vec<ScheduledEvent>, AppError> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `GameCommand: From<axum::Json<GameCommand>>` is not satisfied
[INFO] [stdout]    --> src/api/game_router.rs:101:43
[INFO] [stdout]     |
[INFO] [stdout] 101 |         GameCommand::from(request.command.into()),
[INFO] [stdout]     |                                           ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<axum::Json<GameCommand>>` is not implemented for `GameCommand`
[INFO] [stdout]    --> src/game/command.rs:6:1
[INFO] [stdout]     |
[INFO] [stdout]   6 | pub(crate) enum GameCommand {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `axum::Json<GameCommand>` to implement `Into<GameCommand>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try`
[INFO] [stdout]    --> src/api/game_router.rs:97:17
[INFO] [stdout]     |
[INFO] [stdout]  97 |       let event = apply_command(
[INFO] [stdout]     |  _________________^
[INFO] [stdout]  98 | |         &pool,
[INFO] [stdout]  99 | |         game_id,
[INFO] [stdout] 100 | |         request.player_id,
[INFO] [stdout] 101 | |         GameCommand::from(request.command.into()),
[INFO] [stdout] 102 | |     )?;
[INFO] [stdout]     | |______^ the `?` operator cannot be applied to type `impl std::future::Future<Output = Result<Vec<GameEvent>, AppError>>`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the nightly-only, unstable trait `Try` is not implemented for `impl std::future::Future<Output = Result<Vec<GameEvent>, AppError>>`
[INFO] [stdout] help: consider `await`ing on the `Future`
[INFO] [stdout]     |
[INFO] [stdout] 102 |     ).await?;
[INFO] [stdout]     |      ++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be used in an async function that returns `Result` or `Option` (or another type that implements `FromResidual`)
[INFO] [stdout]    --> src/api/game_router.rs:97:17
[INFO] [stdout]     |
[INFO] [stdout]  96 |    ) -> ApiPostResult<EventDto> {
[INFO] [stdout]     |  _______________________________-
[INFO] [stdout]  97 | |      let event = apply_command(
[INFO] [stdout]     | | _________________^
[INFO] [stdout]  98 | ||         &pool,
[INFO] [stdout]  99 | ||         game_id,
[INFO] [stdout] 100 | ||         request.player_id,
[INFO] [stdout] 101 | ||         GameCommand::from(request.command.into()),
[INFO] [stdout] 102 | ||     )?;
[INFO] [stdout]     | ||______^ cannot use the `?` operator in an async function that returns `impl std::future::Future<Output = Result<Vec<GameEvent>, AppError>>`
[INFO] [stdout] 103 | |      Ok((StatusCode::CREATED, Json(event.into())))
[INFO] [stdout] 104 | |  }
[INFO] [stdout]     | |__- this function should return `Result` or `Option` to accept `?`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/api/game_router.rs:103:41
[INFO] [stdout]     |
[INFO] [stdout] 103 |     Ok((StatusCode::CREATED, Json(event.into())))
[INFO] [stdout]     |                                         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout]     = note: `#[warn(method_call_on_diverging_infer_var)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `EventDto: From<!>` is not satisfied
[INFO] [stdout]    --> src/api/game_router.rs:103:41
[INFO] [stdout]     |
[INFO] [stdout] 103 |     Ok((StatusCode::CREATED, Json(event.into())))
[INFO] [stdout]     |                                         ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<!>` is not implemented for `EventDto`
[INFO] [stdout]       but trait `From<GameEvent>` is implemented for it
[INFO] [stdout]    --> src/api/dto.rs:71:1
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl From<GameEvent> for EventDto {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = help: for that trait implementation, expected `GameEvent`, found `!`
[INFO] [stdout]     = note: required for `!` to implement `Into<EventDto>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]   --> src/api/player_router.rs:23:20
[INFO] [stdout]    |
[INFO] [stdout] 23 |     Ok(Json(player.into()))
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider providing a type annotation
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `PlayerDto: From<!>` is not satisfied
[INFO] [stdout]   --> src/api/player_router.rs:23:20
[INFO] [stdout]    |
[INFO] [stdout] 23 |     Ok(Json(player.into()))
[INFO] [stdout]    |                    ^^^^ unsatisfied trait bound
[INFO] [stdout]    |
[INFO] [stdout] help: the trait `From<!>` is not implemented for `PlayerDto`
[INFO] [stdout]       but trait `From<Player>` is implemented for it
[INFO] [stdout]   --> src/api/dto.rs:41:1
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl From<Player> for PlayerDto {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    = help: for that trait implementation, expected `Player`, found `!`
[INFO] [stdout]    = note: required for `!` to implement `Into<PlayerDto>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `GameCommand: From<axum::Json<GameCommand>>` is not satisfied
[INFO] [stdout]    --> src/api/game_router.rs:101:43
[INFO] [stdout]     |
[INFO] [stdout] 101 |         GameCommand::from(request.command.into()),
[INFO] [stdout]     |                                           ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<axum::Json<GameCommand>>` is not implemented for `GameCommand`
[INFO] [stdout]    --> src/game/command.rs:6:1
[INFO] [stdout]     |
[INFO] [stdout]   6 | pub(crate) enum GameCommand {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: required for `axum::Json<GameCommand>` to implement `Into<GameCommand>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be applied to values that implement `Try`
[INFO] [stdout]    --> src/api/game_router.rs:97:17
[INFO] [stdout]     |
[INFO] [stdout]  97 |       let event = apply_command(
[INFO] [stdout]     |  _________________^
[INFO] [stdout]  98 | |         &pool,
[INFO] [stdout]  99 | |         game_id,
[INFO] [stdout] 100 | |         request.player_id,
[INFO] [stdout] 101 | |         GameCommand::from(request.command.into()),
[INFO] [stdout] 102 | |     )?;
[INFO] [stdout]     | |______^ the `?` operator cannot be applied to type `impl std::future::Future<Output = Result<Vec<GameEvent>, AppError>>`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the nightly-only, unstable trait `Try` is not implemented for `impl std::future::Future<Output = Result<Vec<GameEvent>, AppError>>`
[INFO] [stdout] help: consider `await`ing on the `Future`
[INFO] [stdout]     |
[INFO] [stdout] 102 |     ).await?;
[INFO] [stdout]     |      ++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be used in an async function that returns `Result` or `Option` (or another type that implements `FromResidual`)
[INFO] [stdout]    --> src/api/game_router.rs:97:17
[INFO] [stdout]     |
[INFO] [stdout]  96 |    ) -> ApiPostResult<EventDto> {
[INFO] [stdout]     |  _______________________________-
[INFO] [stdout]  97 | |      let event = apply_command(
[INFO] [stdout]     | | _________________^
[INFO] [stdout]  98 | ||         &pool,
[INFO] [stdout]  99 | ||         game_id,
[INFO] [stdout] 100 | ||         request.player_id,
[INFO] [stdout] 101 | ||         GameCommand::from(request.command.into()),
[INFO] [stdout] 102 | ||     )?;
[INFO] [stdout]     | ||______^ cannot use the `?` operator in an async function that returns `impl std::future::Future<Output = Result<Vec<GameEvent>, AppError>>`
[INFO] [stdout] 103 | |      Ok((StatusCode::CREATED, Json(event.into())))
[INFO] [stdout] 104 | |  }
[INFO] [stdout]     | |__- this function should return `Result` or `Option` to accept `?`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/api/game_router.rs:103:41
[INFO] [stdout]     |
[INFO] [stdout] 103 |     Ok((StatusCode::CREATED, Json(event.into())))
[INFO] [stdout]     |                                         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout]     = note: `#[warn(method_call_on_diverging_infer_var)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `EventDto: From<!>` is not satisfied
[INFO] [stdout]    --> src/api/game_router.rs:103:41
[INFO] [stdout]     |
[INFO] [stdout] 103 |     Ok((StatusCode::CREATED, Json(event.into())))
[INFO] [stdout]     |                                         ^^^^ unsatisfied trait bound
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `From<!>` is not implemented for `EventDto`
[INFO] [stdout]       but trait `From<GameEvent>` is implemented for it
[INFO] [stdout]    --> src/api/dto.rs:71:1
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl From<GameEvent> for EventDto {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = help: for that trait implementation, expected `GameEvent`, found `!`
[INFO] [stdout]     = note: required for `!` to implement `Into<EventDto>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]   --> src/db/queries.rs:51:41
[INFO] [stdout]    |
[INFO] [stdout] 51 |     let game_ids: Vec<Uuid> = game_rows.iter().map(|row| row.id).collect();
[INFO] [stdout]    |                                         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider providing a type annotation
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]   --> src/api/player_router.rs:23:20
[INFO] [stdout]    |
[INFO] [stdout] 23 |     Ok(Json(player.into()))
[INFO] [stdout]    |                    ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider providing a type annotation
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `PlayerDto: From<!>` is not satisfied
[INFO] [stdout]   --> src/api/player_router.rs:23:20
[INFO] [stdout]    |
[INFO] [stdout] 23 |     Ok(Json(player.into()))
[INFO] [stdout]    |                    ^^^^ unsatisfied trait bound
[INFO] [stdout]    |
[INFO] [stdout] help: the trait `From<!>` is not implemented for `PlayerDto`
[INFO] [stdout]       but trait `From<Player>` is implemented for it
[INFO] [stdout]   --> src/api/dto.rs:41:1
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl From<Player> for PlayerDto {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    = help: for that trait implementation, expected `Player`, found `!`
[INFO] [stdout]    = note: required for `!` to implement `Into<PlayerDto>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]   --> src/db/queries.rs:51:41
[INFO] [stdout]    |
[INFO] [stdout] 51 |     let game_ids: Vec<Uuid> = game_rows.iter().map(|row| row.id).collect();
[INFO] [stdout]    |                                         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider providing a type annotation
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `iter` found for type `!` in the current scope
[INFO] [stdout]   --> src/db/queries.rs:51:41
[INFO] [stdout]    |
[INFO] [stdout] 51 |     let game_ids: Vec<Uuid> = game_rows.iter().map(|row| row.id).collect();
[INFO] [stdout]    |                                         ^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `iter` found for type `!` in the current scope
[INFO] [stdout]   --> src/db/queries.rs:51:41
[INFO] [stdout]    |
[INFO] [stdout] 51 |     let game_ids: Vec<Uuid> = game_rows.iter().map(|row| row.id).collect();
[INFO] [stdout]    |                                         ^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: `!` is not an iterator
[INFO] [stdout]   --> src/db/queries.rs:75:10
[INFO] [stdout]    |
[INFO] [stdout] 74 |     game_rows
[INFO] [stdout] 75 |         .into_iter()
[INFO] [stdout]    |          ^^^^^^^^^ `!` is not an iterator
[INFO] [stdout]    |
[INFO] [stdout]    = note: the following trait bounds were not satisfied:
[INFO] [stdout]            `!: Iterator`
[INFO] [stdout]            which is required by `!: IntoIterator`
[INFO] [stdout]            `&!: Iterator`
[INFO] [stdout]            which is required by `&!: IntoIterator`
[INFO] [stdout]            `!: Iterator`
[INFO] [stdout]            which is required by `&mut !: IntoIterator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable call
[INFO] [stdout]   --> src/db/queries.rs:75:10
[INFO] [stdout]    |
[INFO] [stdout] 74 |     game_rows
[INFO] [stdout]    |     --------- any code following this expression is unreachable
[INFO] [stdout] 75 |         .into_iter()
[INFO] [stdout]    |          ^^^^^^^^^ unreachable call
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]   --> src/db/queries.rs:95:6
[INFO] [stdout]    |
[INFO] [stdout] 95 |     .ok_or(AppError::NotFound {
[INFO] [stdout]    |      ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider providing a type annotation
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: `!` is not an iterator
[INFO] [stdout]   --> src/db/queries.rs:75:10
[INFO] [stdout]    |
[INFO] [stdout] 74 |     game_rows
[INFO] [stdout] 75 |         .into_iter()
[INFO] [stdout]    |          ^^^^^^^^^ `!` is not an iterator
[INFO] [stdout]    |
[INFO] [stdout]    = note: the following trait bounds were not satisfied:
[INFO] [stdout]            `!: Iterator`
[INFO] [stdout]            which is required by `!: IntoIterator`
[INFO] [stdout]            `&!: Iterator`
[INFO] [stdout]            which is required by `&!: IntoIterator`
[INFO] [stdout]            `!: Iterator`
[INFO] [stdout]            which is required by `&mut !: IntoIterator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable call
[INFO] [stdout]   --> src/db/queries.rs:75:10
[INFO] [stdout]    |
[INFO] [stdout] 74 |     game_rows
[INFO] [stdout]    |     --------- any code following this expression is unreachable
[INFO] [stdout] 75 |         .into_iter()
[INFO] [stdout]    |          ^^^^^^^^^ unreachable call
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]   --> src/db/queries.rs:95:6
[INFO] [stdout]    |
[INFO] [stdout] 95 |     .ok_or(AppError::NotFound {
[INFO] [stdout]    |      ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider providing a type annotation
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]   --> src/db/queries.rs:95:6
[INFO] [stdout]    |
[INFO] [stdout] 84 |     let game_row = query_as!(
[INFO] [stdout] 85 |         GameRow,
[INFO] [stdout] 86 |         r#"
[INFO] [stdout] 87 |         SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 88 |         FROM games
[INFO] [stdout] 89 |         WHERE id = $1
[INFO] [stdout] 90 |         "#,
[INFO] [stdout] 91 |         id.to_uuid()
[INFO] [stdout] 92 |     )
[INFO] [stdout] 93 |     .fetch_optional(pool)
[INFO] [stdout] 94 |     .await?
[INFO] [stdout] 95 |     .ok_or(AppError::NotFound {
[INFO] [stdout]    |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/db/queries.rs:137:6
[INFO] [stdout]     |
[INFO] [stdout] 137 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]   --> src/db/queries.rs:95:6
[INFO] [stdout]    |
[INFO] [stdout] 84 |     let game_row = query_as!(
[INFO] [stdout] 85 |         GameRow,
[INFO] [stdout] 86 |         r#"
[INFO] [stdout] 87 |         SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 88 |         FROM games
[INFO] [stdout] 89 |         WHERE id = $1
[INFO] [stdout] 90 |         "#,
[INFO] [stdout] 91 |         id.to_uuid()
[INFO] [stdout] 92 |     )
[INFO] [stdout] 93 |     .fetch_optional(pool)
[INFO] [stdout] 94 |     .await?
[INFO] [stdout] 95 |     .ok_or(AppError::NotFound {
[INFO] [stdout]    |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/db/queries.rs:137:6
[INFO] [stdout]     |
[INFO] [stdout] 137 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]    --> src/db/queries.rs:137:6
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let game_row = query_as!(
[INFO] [stdout] 129 |         GameRow,
[INFO] [stdout] 130 |         r#"SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 131 |            FROM games WHERE id = $1
[INFO] [stdout] 132 |            FOR UPDATE "#,
[INFO] [stdout] 133 |         game_id.to_uuid()
[INFO] [stdout] 134 |     )
[INFO] [stdout] 135 |     .fetch_optional(&mut *conn)
[INFO] [stdout] 136 |     .await?
[INFO] [stdout] 137 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]    --> src/db/queries.rs:137:6
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let game_row = query_as!(
[INFO] [stdout] 129 |         GameRow,
[INFO] [stdout] 130 |         r#"SELECT id, status, state, maximum_players, created_at, started_at
[INFO] [stdout] 131 |            FROM games WHERE id = $1
[INFO] [stdout] 132 |            FOR UPDATE "#,
[INFO] [stdout] 133 |         game_id.to_uuid()
[INFO] [stdout] 134 |     )
[INFO] [stdout] 135 |     .fetch_optional(&mut *conn)
[INFO] [stdout] 136 |     .await?
[INFO] [stdout] 137 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/db/queries.rs:241:6
[INFO] [stdout]     |
[INFO] [stdout] 241 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/db/queries.rs:241:6
[INFO] [stdout]     |
[INFO] [stdout] 241 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]    --> src/db/queries.rs:241:6
[INFO] [stdout]     |
[INFO] [stdout] 230 |     let row = query_as!(
[INFO] [stdout] 231 |         PlayerRow,
[INFO] [stdout] 232 |         r#"
[INFO] [stdout] 233 |         SELECT id, name
[INFO] [stdout] 234 |         FROM players
[INFO] [stdout] 235 |         WHERE id = $1
[INFO] [stdout] 236 |         "#,
[INFO] [stdout] 237 |         player_id.to_uuid()
[INFO] [stdout] 238 |     )
[INFO] [stdout] 239 |     .fetch_optional(executor)
[INFO] [stdout] 240 |     .await?
[INFO] [stdout] 241 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/db/queries.rs:268:6
[INFO] [stdout]     |
[INFO] [stdout] 268 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]    --> src/db/queries.rs:241:6
[INFO] [stdout]     |
[INFO] [stdout] 230 |     let row = query_as!(
[INFO] [stdout] 231 |         PlayerRow,
[INFO] [stdout] 232 |         r#"
[INFO] [stdout] 233 |         SELECT id, name
[INFO] [stdout] 234 |         FROM players
[INFO] [stdout] 235 |         WHERE id = $1
[INFO] [stdout] 236 |         "#,
[INFO] [stdout] 237 |         player_id.to_uuid()
[INFO] [stdout] 238 |     )
[INFO] [stdout] 239 |     .fetch_optional(executor)
[INFO] [stdout] 240 |     .await?
[INFO] [stdout] 241 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method call on a diverging inference variable
[INFO] [stdout]    --> src/db/queries.rs:268:6
[INFO] [stdout]     |
[INFO] [stdout] 268 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider providing a type annotation
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #156047 <https://github.com/rust-lang/rust/issues/156047>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]    --> src/db/queries.rs:268:6
[INFO] [stdout]     |
[INFO] [stdout] 255 |     let row = query_as!(
[INFO] [stdout] 256 |         PlayerRow,
[INFO] [stdout] 257 |         r#"
[INFO] [stdout] 258 |         SELECT p.id, p.name
[INFO] [stdout] 259 |         FROM game_players gp
[INFO] [stdout] 260 |         JOIN players p ON p.id = gp.player_id
[INFO] [stdout] 261 |         WHERE gp.game_id = $1 AND gp.player_id = $2
[INFO] [stdout] 262 |         "#,
[INFO] [stdout] 263 |         game_id.to_uuid(),
[INFO] [stdout] 264 |         player_id.to_uuid()
[INFO] [stdout] 265 |     )
[INFO] [stdout] 266 |     .fetch_optional(pool)
[INFO] [stdout] 267 |     .await?
[INFO] [stdout] 268 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `ok_or` found for type `!` in the current scope
[INFO] [stdout]    --> src/db/queries.rs:268:6
[INFO] [stdout]     |
[INFO] [stdout] 255 |     let row = query_as!(
[INFO] [stdout] 256 |         PlayerRow,
[INFO] [stdout] 257 |         r#"
[INFO] [stdout] 258 |         SELECT p.id, p.name
[INFO] [stdout] 259 |         FROM game_players gp
[INFO] [stdout] 260 |         JOIN players p ON p.id = gp.player_id
[INFO] [stdout] 261 |         WHERE gp.game_id = $1 AND gp.player_id = $2
[INFO] [stdout] 262 |         "#,
[INFO] [stdout] 263 |         game_id.to_uuid(),
[INFO] [stdout] 264 |         player_id.to_uuid()
[INFO] [stdout] 265 |     )
[INFO] [stdout] 266 |     .fetch_optional(pool)
[INFO] [stdout] 267 |     .await?
[INFO] [stdout] 268 |     .ok_or(AppError::NotFound {
[INFO] [stdout]     |      ^^^^^ method not found in `!`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Result<GameEvent, AppError>: From<&GameEventRow>` is not satisfied
[INFO] [stdout]     --> src/db/queries.rs:404:39
[INFO] [stdout]      |
[INFO] [stdout]  404 |     rows.iter().map(|row| row.clone().into()).collect()
[INFO] [stdout]      |                                       ^^^^ the trait `From<&GameEventRow>` is not implemented for `Result<GameEvent, AppError>`
[INFO] [stdout]      |
[INFO] [stdout] help: the following other types implement trait `From<T>`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/either-1.18.0/src/lib.rs:1397:1
[INFO] [stdout]      |
[INFO] [stdout] 1397 | impl<L, R> From<Either<L, R>> for Result<R, L> {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Result<R, L>` implements `From<Either<L, R>>`
[INFO] [stdout]      |
[INFO] [stdout]     ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/idna-1.1.0/src/lib.rs:68:1
[INFO] [stdout]      |
[INFO] [stdout]   68 | impl From<Errors> for Result<(), Errors> {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Result<(), idna::Errors>` implements `From<idna::Errors>`
[INFO] [stdout]      = note: required for `&GameEventRow` to implement `Into<Result<GameEvent, AppError>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `Result<GameEvent, AppError>: From<&GameEventRow>` is not satisfied
[INFO] [stdout]     --> src/db/queries.rs:404:39
[INFO] [stdout]      |
[INFO] [stdout]  404 |     rows.iter().map(|row| row.clone().into()).collect()
[INFO] [stdout]      |                                       ^^^^ the trait `From<&GameEventRow>` is not implemented for `Result<GameEvent, AppError>`
[INFO] [stdout]      |
[INFO] [stdout] help: the following other types implement trait `From<T>`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/either-1.18.0/src/lib.rs:1397:1
[INFO] [stdout]      |
[INFO] [stdout] 1397 | impl<L, R> From<Either<L, R>> for Result<R, L> {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Result<R, L>` implements `From<Either<L, R>>`
[INFO] [stdout]      |
[INFO] [stdout]     ::: /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/idna-1.1.0/src/lib.rs:68:1
[INFO] [stdout]      |
[INFO] [stdout]   68 | impl From<Errors> for Result<(), Errors> {
[INFO] [stdout]      | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Result<(), idna::Errors>` implements `From<idna::Errors>`
[INFO] [stdout]      = note: required for `&GameEventRow` to implement `Into<Result<GameEvent, AppError>>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/db/services.rs:31:27
[INFO] [stdout]     |
[INFO] [stdout]  31 |     let new_events = game.apply_command(player_id, command)?;
[INFO] [stdout]     |                           ^^^^^^^^^^^^^-------------------- argument #3 of type `OffsetDateTime` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/game/game.rs:257:19
[INFO] [stdout]     |
[INFO] [stdout] 257 |     pub(crate) fn apply_command(
[INFO] [stdout]     |                   ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |         now: OffsetDateTime,
[INFO] [stdout]     |         -------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout]  31 |     let new_events = game.apply_command(player_id, command, /* OffsetDateTime */)?;
[INFO] [stdout]     |                                                           ++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/db/services.rs:31:27
[INFO] [stdout]     |
[INFO] [stdout]  31 |     let new_events = game.apply_command(player_id, command)?;
[INFO] [stdout]     |                           ^^^^^^^^^^^^^-------------------- argument #3 of type `OffsetDateTime` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/game/game.rs:257:19
[INFO] [stdout]     |
[INFO] [stdout] 257 |     pub(crate) fn apply_command(
[INFO] [stdout]     |                   ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |         now: OffsetDateTime,
[INFO] [stdout]     |         -------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout]  31 |     let new_events = game.apply_command(player_id, command, /* OffsetDateTime */)?;
[INFO] [stdout]     |                                                           ++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `axum::Json<GameCommand>: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]     --> src/api/dto.rs:52:18
[INFO] [stdout]      |
[INFO] [stdout]   52 |     pub command: Json<GameCommand>,
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `axum::Json<GameCommand>`
[INFO] [stdout]      |
[INFO] [stdout]      = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `axum::Json<GameCommand>` type
[INFO] [stdout]      = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]      = help: the following other types implement trait `Deserialize<'de>`:
[INFO] [stdout]                `&'a JsonRawValue` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a [u8]` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a std::path::Path` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a str` implements `Deserialize<'de>`
[INFO] [stdout]                `()` implements `Deserialize<'de>`
[INFO] [stdout]                `(T,)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1, T2)` implements `Deserialize<'de>`
[INFO] [stdout]              and 218 others
[INFO] [stdout] note: required by a bound in `next_element`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde_core-1.0.229/src/de/mod.rs:1771:12
[INFO] [stdout]      |
[INFO] [stdout] 1749 | pub trait SeqAccess<'de> {
[INFO] [stdout] ...
[INFO] [stdout] 1769 |     fn next_element<T>(&mut self) -> Result<Option<T>, Self::Error>
[INFO] [stdout] 1770 |     where
[INFO] [stdout] 1771 |         T: Deserialize<'de>,
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^ required by this bound in `SeqAccess::next_element`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `axum::Json<GameCommand>: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]     --> src/api/dto.rs:52:18
[INFO] [stdout]      |
[INFO] [stdout]   52 |     pub command: Json<GameCommand>,
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `axum::Json<GameCommand>`
[INFO] [stdout]      |
[INFO] [stdout]      = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `axum::Json<GameCommand>` type
[INFO] [stdout]      = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]      = help: the following other types implement trait `Deserialize<'de>`:
[INFO] [stdout]                `&'a JsonRawValue` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a [u8]` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a std::path::Path` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a str` implements `Deserialize<'de>`
[INFO] [stdout]                `()` implements `Deserialize<'de>`
[INFO] [stdout]                `(T,)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1, T2)` implements `Deserialize<'de>`
[INFO] [stdout]              and 218 others
[INFO] [stdout] note: required by a bound in `next_element`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde_core-1.0.229/src/de/mod.rs:1771:12
[INFO] [stdout]      |
[INFO] [stdout] 1749 | pub trait SeqAccess<'de> {
[INFO] [stdout] ...
[INFO] [stdout] 1769 |     fn next_element<T>(&mut self) -> Result<Option<T>, Self::Error>
[INFO] [stdout] 1770 |     where
[INFO] [stdout] 1771 |         T: Deserialize<'de>,
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^ required by this bound in `SeqAccess::next_element`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `axum::Json<GameCommand>: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]     --> src/api/dto.rs:52:18
[INFO] [stdout]      |
[INFO] [stdout]   52 |     pub command: Json<GameCommand>,
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `axum::Json<GameCommand>`
[INFO] [stdout]      |
[INFO] [stdout]      = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `axum::Json<GameCommand>` type
[INFO] [stdout]      = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]      = help: the following other types implement trait `Deserialize<'de>`:
[INFO] [stdout]                `&'a JsonRawValue` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a [u8]` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a std::path::Path` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a str` implements `Deserialize<'de>`
[INFO] [stdout]                `()` implements `Deserialize<'de>`
[INFO] [stdout]                `(T,)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1, T2)` implements `Deserialize<'de>`
[INFO] [stdout]              and 218 others
[INFO] [stdout] note: required by a bound in `next_value`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde_core-1.0.229/src/de/mod.rs:1916:12
[INFO] [stdout]      |
[INFO] [stdout] 1837 | pub trait MapAccess<'de> {
[INFO] [stdout] ...
[INFO] [stdout] 1914 |     fn next_value<V>(&mut self) -> Result<V, Self::Error>
[INFO] [stdout] 1915 |     where
[INFO] [stdout] 1916 |         V: Deserialize<'de>,
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^ required by this bound in `MapAccess::next_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `axum::Json<GameCommand>: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]     --> src/api/dto.rs:52:18
[INFO] [stdout]      |
[INFO] [stdout]   52 |     pub command: Json<GameCommand>,
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `axum::Json<GameCommand>`
[INFO] [stdout]      |
[INFO] [stdout]      = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `axum::Json<GameCommand>` type
[INFO] [stdout]      = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]      = help: the following other types implement trait `Deserialize<'de>`:
[INFO] [stdout]                `&'a JsonRawValue` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a [u8]` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a std::path::Path` implements `Deserialize<'de>`
[INFO] [stdout]                `&'a str` implements `Deserialize<'de>`
[INFO] [stdout]                `()` implements `Deserialize<'de>`
[INFO] [stdout]                `(T,)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1)` implements `Deserialize<'de>`
[INFO] [stdout]                `(T0, T1, T2)` implements `Deserialize<'de>`
[INFO] [stdout]              and 218 others
[INFO] [stdout] note: required by a bound in `next_value`
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde_core-1.0.229/src/de/mod.rs:1916:12
[INFO] [stdout]      |
[INFO] [stdout] 1837 | pub trait MapAccess<'de> {
[INFO] [stdout] ...
[INFO] [stdout] 1914 |     fn next_value<V>(&mut self) -> Result<V, Self::Error>
[INFO] [stdout] 1915 |     where
[INFO] [stdout] 1916 |         V: Deserialize<'de>,
[INFO] [stdout]      |            ^^^^^^^^^^^^^^^^ required by this bound in `MapAccess::next_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `axum::Json<GameCommand>: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]   --> src/api/dto.rs:50:10
[INFO] [stdout]    |
[INFO] [stdout] 50 | #[derive(serde::Deserialize)]
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `axum::Json<GameCommand>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `axum::Json<GameCommand>` type
[INFO] [stdout]    = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]    = help: the following other types implement trait `Deserialize<'de>`:
[INFO] [stdout]              `&'a JsonRawValue` implements `Deserialize<'de>`
[INFO] [stdout]              `&'a [u8]` implements `Deserialize<'de>`
[INFO] [stdout]              `&'a std::path::Path` implements `Deserialize<'de>`
[INFO] [stdout]              `&'a str` implements `Deserialize<'de>`
[INFO] [stdout]              `()` implements `Deserialize<'de>`
[INFO] [stdout]              `(T,)` implements `Deserialize<'de>`
[INFO] [stdout]              `(T0, T1)` implements `Deserialize<'de>`
[INFO] [stdout]              `(T0, T1, T2)` implements `Deserialize<'de>`
[INFO] [stdout]            and 218 others
[INFO] [stdout] note: required by a bound in `serde::__private229::de::missing_field`
[INFO] [stdout]   --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.229/src/private/de.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn missing_field<'de, V, E>(field: &'static str) -> Result<V, E>
[INFO] [stdout] 25 | where
[INFO] [stdout] 26 |     V: Deserialize<'de>,
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^ required by this bound in `missing_field`
[INFO] [stdout]    = note: this error originates in the derive macro `serde::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `axum::Json<GameCommand>: serde::Deserialize<'de>` is not satisfied
[INFO] [stdout]   --> src/api/dto.rs:50:10
[INFO] [stdout]    |
[INFO] [stdout] 50 | #[derive(serde::Deserialize)]
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^ the trait `Deserialize<'_>` is not implemented for `axum::Json<GameCommand>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: for local types consider adding `#[derive(serde::Deserialize)]` to your `axum::Json<GameCommand>` type
[INFO] [stdout]    = note: for types from other crates check whether the crate offers a `serde` feature flag
[INFO] [stdout]    = help: the following other types implement trait `Deserialize<'de>`:
[INFO] [stdout]              `&'a JsonRawValue` implements `Deserialize<'de>`
[INFO] [stdout]              `&'a [u8]` implements `Deserialize<'de>`
[INFO] [stdout]              `&'a std::path::Path` implements `Deserialize<'de>`
[INFO] [stdout]              `&'a str` implements `Deserialize<'de>`
[INFO] [stdout]              `()` implements `Deserialize<'de>`
[INFO] [stdout]              `(T,)` implements `Deserialize<'de>`
[INFO] [stdout]              `(T0, T1)` implements `Deserialize<'de>`
[INFO] [stdout]              `(T0, T1, T2)` implements `Deserialize<'de>`
[INFO] [stdout]            and 218 others
[INFO] [stdout] note: required by a bound in `serde::__private229::de::missing_field`
[INFO] [stdout]   --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/serde-1.0.229/src/private/de.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn missing_field<'de, V, E>(field: &'static str) -> Result<V, E>
[INFO] [stdout] 25 | where
[INFO] [stdout] 26 |     V: Deserialize<'de>,
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^ required by this bound in `missing_field`
[INFO] [stdout]    = note: this error originates in the derive macro `serde::Deserialize` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/api/dto.rs:74:17
[INFO] [stdout]    |
[INFO] [stdout] 74 |             id: event.id,
[INFO] [stdout]    |                 ^^^^^^^^ expected `usize`, found `i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/api/dto.rs:76:25
[INFO] [stdout]    |
[INFO] [stdout] 76 |             command_id: event.command_id,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^ expected `usize`, found `Option<i64>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected type `usize`
[INFO] [stdout]               found enum `std::option::Option<i64>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `kind` on type `GameEvent`
[INFO] [stdout]   --> src/api/dto.rs:77:25
[INFO] [stdout]    |
[INFO] [stdout] 77 |             kind: event.kind,
[INFO] [stdout]    |                         ^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `id`, `game_id`, `command_id`, `data`, `due_tick` ... and 3 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `payload` on type `GameEvent`
[INFO] [stdout]   --> src/api/dto.rs:78:28
[INFO] [stdout]    |
[INFO] [stdout] 78 |             payload: event.payload,
[INFO] [stdout]    |                            ^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `id`, `game_id`, `command_id`, `data`, `due_tick` ... and 3 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/api/dto.rs:79:23
[INFO] [stdout]    |
[INFO] [stdout] 79 |             due_tick: event.due_tick,
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^ expected `usize`, found `i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/api/dto.rs:74:17
[INFO] [stdout]    |
[INFO] [stdout] 74 |             id: event.id,
[INFO] [stdout]    |                 ^^^^^^^^ expected `usize`, found `i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/api/dto.rs:76:25
[INFO] [stdout]    |
[INFO] [stdout] 76 |             command_id: event.command_id,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^ expected `usize`, found `Option<i64>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected type `usize`
[INFO] [stdout]               found enum `std::option::Option<i64>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `kind` on type `GameEvent`
[INFO] [stdout]   --> src/api/dto.rs:77:25
[INFO] [stdout]    |
[INFO] [stdout] 77 |             kind: event.kind,
[INFO] [stdout]    |                         ^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `id`, `game_id`, `command_id`, `data`, `due_tick` ... and 3 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `payload` on type `GameEvent`
[INFO] [stdout]   --> src/api/dto.rs:78:28
[INFO] [stdout]    |
[INFO] [stdout] 78 |             payload: event.payload,
[INFO] [stdout]    |                            ^^^^^^^ unknown field
[INFO] [stdout]    |
[INFO] [stdout]    = note: available fields are: `id`, `game_id`, `command_id`, `data`, `due_tick` ... and 3 others
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/api/dto.rs:79:23
[INFO] [stdout]    |
[INFO] [stdout] 79 |             due_tick: event.due_tick,
[INFO] [stdout]    |                       ^^^^^^^^^^^^^^ expected `usize`, found `i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `fn(_, Json<_>, Path<GameId>) -> _ {post_game_commands}: Handler<_, _>` is not satisfied
[INFO] [stdout]    --> src/api/game_router.rs:116:43
[INFO] [stdout]     |
[INFO] [stdout] 116 |         .route("/{game_id}/commands", get(post_game_commands))
[INFO] [stdout]     |                                       --- ^^^^^^^^^^^^^^^^^^ the trait `Handler<_, _>` is not implemented for fn item `fn(State<Pool<_>>, Json<_>, Path<GameId>) -> _ {post_game_commands}`
[INFO] [stdout]     |                                       |
[INFO] [stdout]     |                                       required by a bound introduced by this call
[INFO] [stdout]     |
[INFO] [stdout]     = note: Consider using `#[axum::debug_handler]` to improve the error message
[INFO] [stdout] note: required by a bound in `axum::routing::get`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/axum-0.8.9/src/routing/method_routing.rs:167:16
[INFO] [stdout]     |
[INFO] [stdout] 167 |             H: Handler<T, S>,
[INFO] [stdout]     |                ^^^^^^^^^^^^^ required by this bound in `get`
[INFO] [stdout] ...
[INFO] [stdout] 441 | top_level_handler_fn!(get, GET);
[INFO] [stdout]     | ------------------------------- in this macro invocation
[INFO] [stdout]     = note: the full name for the type has been written to '/opt/rustwide/target/debug/build/vincite/dbb1a2e73d1df54d/out/vincite-dbb1a2e73d1df54d.long-type-14337908907412043995.txt'
[INFO] [stdout]     = note: consider using `--verbose` to print the full type name to the console
[INFO] [stdout]     = note: this error originates in the macro `top_level_handler_fn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the trait bound `fn(_, Json<_>, Path<GameId>) -> _ {post_game_commands}: Handler<_, _>` is not satisfied
[INFO] [stdout]    --> src/api/game_router.rs:116:43
[INFO] [stdout]     |
[INFO] [stdout] 116 |         .route("/{game_id}/commands", get(post_game_commands))
[INFO] [stdout]     |                                       --- ^^^^^^^^^^^^^^^^^^ the trait `Handler<_, _>` is not implemented for fn item `fn(State<Pool<_>>, Json<_>, Path<GameId>) -> _ {post_game_commands}`
[INFO] [stdout]     |                                       |
[INFO] [stdout]     |                                       required by a bound introduced by this call
[INFO] [stdout]     |
[INFO] [stdout]     = note: Consider using `#[axum::debug_handler]` to improve the error message
[INFO] [stdout] note: required by a bound in `axum::routing::get`
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/axum-0.8.9/src/routing/method_routing.rs:167:16
[INFO] [stdout]     |
[INFO] [stdout] 167 |             H: Handler<T, S>,
[INFO] [stdout]     |                ^^^^^^^^^^^^^ required by this bound in `get`
[INFO] [stdout] ...
[INFO] [stdout] 441 | top_level_handler_fn!(get, GET);
[INFO] [stdout]     | ------------------------------- in this macro invocation
[INFO] [stdout]     = note: the full name for the type has been written to '/opt/rustwide/target/debug/build/vincite/a7f0f3030446cee2/out/vincite-a7f0f3030446cee2.long-type-11097594757662875464.txt'
[INFO] [stdout]     = note: consider using `--verbose` to print the full type name to the console
[INFO] [stdout]     = note: this error originates in the macro `top_level_handler_fn` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 9 arguments but 8 arguments were supplied
[INFO] [stdout]    --> src/db/queries.rs:27:5
[INFO] [stdout]     |
[INFO] [stdout]  27 |       Game::restore(
[INFO] [stdout]     |  _____^^^^^^^^^^^^^-
[INFO] [stdout]  28 | |         GameId::from_uuid(row.id),
[INFO] [stdout]  29 | |         row.status.parse()?,
[INFO] [stdout]  30 | |         host,
[INFO] [stdout] ...   |
[INFO] [stdout]  35 | |         row.started_at,
[INFO] [stdout]  36 | |     )
[INFO] [stdout]     | |_____- argument #9 of type `Vec<GameEvent>` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]    --> src/game/game.rs:160:19
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub(crate) fn restore(
[INFO] [stdout]     |                   ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |         events: Vec<GameEvent>,
[INFO] [stdout]     |         ----------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout]  27 |     Game::restore(
[INFO] [stdout] ...
[INFO] [stdout]  35 |         row.started_at,
[INFO] [stdout]  36 ~         /* Vec<GameEvent> */,
[INFO] [stdout]  37 ~     )
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 9 arguments but 8 arguments were supplied
[INFO] [stdout]    --> src/db/queries.rs:27:5
[INFO] [stdout]     |
[INFO] [stdout]  27 |       Game::restore(
[INFO] [stdout]     |  _____^^^^^^^^^^^^^-
[INFO] [stdout]  28 | |         GameId::from_uuid(row.id),
[INFO] [stdout]  29 | |         row.status.parse()?,
[INFO] [stdout]  30 | |         host,
[INFO] [stdout] ...   |
[INFO] [stdout]  35 | |         row.started_at,
[INFO] [stdout]  36 | |     )
[INFO] [stdout]     | |_____- argument #9 of type `Vec<GameEvent>` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]    --> src/game/game.rs:160:19
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub(crate) fn restore(
[INFO] [stdout]     |                   ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |         events: Vec<GameEvent>,
[INFO] [stdout]     |         ----------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout]  27 |     Game::restore(
[INFO] [stdout] ...
[INFO] [stdout]  35 |         row.started_at,
[INFO] [stdout]  36 ~         /* Vec<GameEvent> */,
[INFO] [stdout]  37 ~     )
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/game/game.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let pending_events = self
[INFO] [stdout]     |             ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |         pending_events.iter().for_each(|event| {
[INFO] [stdout]     |         -------------- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `pending_events` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let pending_events: Vec<_> = self
[INFO] [stdout]     |                           ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/game.rs:266:49
[INFO] [stdout]     |
[INFO] [stdout] 266 |         let new_events = rules::execute_command(self.state.as_mut(), command)
[INFO] [stdout]     |                          ---------------------- ^^^^^^^^^^^^^^^^^^^ expected `&mut GameState`, found `Option<&mut GameState>`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected mutable reference `&mut GameState`
[INFO] [stdout]                             found enum `std::option::Option<&mut GameState>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/game/rules.rs:209:15
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub(crate) fn execute_command(
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 210 |     state: &mut GameState,
[INFO] [stdout]     |     ---------------------
[INFO] [stdout] help: consider using `Option::expect` to unwrap the `std::option::Option<&mut GameState>` value, panicking if the value is an `Option::None`
[INFO] [stdout]     |
[INFO] [stdout] 266 |         let new_events = rules::execute_command(self.state.as_mut().expect("REASON"), command)
[INFO] [stdout]     |                                                                    +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/game/game.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let pending_events = self
[INFO] [stdout]     |             ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |         pending_events.iter().for_each(|event| {
[INFO] [stdout]     |         -------------- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `pending_events` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let pending_events: Vec<_> = self
[INFO] [stdout]     |                           ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/game.rs:266:49
[INFO] [stdout]     |
[INFO] [stdout] 266 |         let new_events = rules::execute_command(self.state.as_mut(), command)
[INFO] [stdout]     |                          ---------------------- ^^^^^^^^^^^^^^^^^^^ expected `&mut GameState`, found `Option<&mut GameState>`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected mutable reference `&mut GameState`
[INFO] [stdout]                             found enum `std::option::Option<&mut GameState>`
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/game/rules.rs:209:15
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub(crate) fn execute_command(
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 210 |     state: &mut GameState,
[INFO] [stdout]     |     ---------------------
[INFO] [stdout] help: consider using `Option::expect` to unwrap the `std::option::Option<&mut GameState>` value, panicking if the value is an `Option::None`
[INFO] [stdout]     |
[INFO] [stdout] 266 |         let new_events = rules::execute_command(self.state.as_mut().expect("REASON"), command)
[INFO] [stdout]     |                                                                    +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]     --> src/game/game.rs:272:44
[INFO] [stdout]      |
[INFO] [stdout]  272 |                 due_at: now.saturating_add(self.state.unwrap().tick.saturating_mul(TICK_SECONDS).std_seconds())
[INFO] [stdout]      |                             -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `SignedDuration`, found `Duration`
[INFO] [stdout]      |                             |
[INFO] [stdout]      |                             arguments to this method are incorrect
[INFO] [stdout]      |
[INFO] [stdout] note: method defined here
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/time-0.3.55/src/offset_date_time.rs:1075:18
[INFO] [stdout]      |
[INFO] [stdout] 1075 |     pub const fn saturating_add(self, duration: SignedDuration) -> Self {
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/game.rs:262:10
[INFO] [stdout]     |
[INFO] [stdout] 257 |     pub(crate) fn apply_command(
[INFO] [stdout]     |                   ------------- implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] ...
[INFO] [stdout] 262 |     ) -> Result<Vec<NewGameEvent>, AppError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Result<Vec<NewGameEvent>, AppError>`, found `()`
[INFO] [stdout]     |
[INFO] [stdout]     = note:   expected enum `Result<Vec<NewGameEvent>, AppError>`
[INFO] [stdout]             found unit type `()`
[INFO] [stdout] help: consider returning the local binding `new_events`
[INFO] [stdout]     |
[INFO] [stdout] 273 ~             }}).collect();
[INFO] [stdout] 274 +         new_events
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]     --> src/game/game.rs:272:44
[INFO] [stdout]      |
[INFO] [stdout]  272 |                 due_at: now.saturating_add(self.state.unwrap().tick.saturating_mul(TICK_SECONDS).std_seconds())
[INFO] [stdout]      |                             -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `SignedDuration`, found `Duration`
[INFO] [stdout]      |                             |
[INFO] [stdout]      |                             arguments to this method are incorrect
[INFO] [stdout]      |
[INFO] [stdout] note: method defined here
[INFO] [stdout]     --> /opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/time-0.3.55/src/offset_date_time.rs:1075:18
[INFO] [stdout]      |
[INFO] [stdout] 1075 |     pub const fn saturating_add(self, duration: SignedDuration) -> Self {
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/game.rs:262:10
[INFO] [stdout]     |
[INFO] [stdout] 257 |     pub(crate) fn apply_command(
[INFO] [stdout]     |                   ------------- implicitly returns `()` as its body has no tail or `return` expression
[INFO] [stdout] ...
[INFO] [stdout] 262 |     ) -> Result<Vec<NewGameEvent>, AppError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Result<Vec<NewGameEvent>, AppError>`, found `()`
[INFO] [stdout]     |
[INFO] [stdout]     = note:   expected enum `Result<Vec<NewGameEvent>, AppError>`
[INFO] [stdout]             found unit type `()`
[INFO] [stdout] help: consider returning the local binding `new_events`
[INFO] [stdout]     |
[INFO] [stdout] 273 ~             }}).collect();
[INFO] [stdout] 274 +         new_events
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/rules.rs:104:55
[INFO] [stdout]     |
[INFO] [stdout] 104 |     let currentLevel = settlement.building_levels.get(building)?;
[INFO] [stdout]     |                                                   --- ^^^^^^^^ expected `&Building`, found `Building`
[INFO] [stdout]     |                                                   |
[INFO] [stdout]     |                                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/3154cc1a3e6424e44f438a95007d043ed5ceaaf6/library/alloc/src/collections/btree/map.rs:727:11
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 104 |     let currentLevel = settlement.building_levels.get(&building)?;
[INFO] [stdout]     |                                                       +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in a function that returns `Result`
[INFO] [stdout]    --> src/game/rules.rs:104:64
[INFO] [stdout]     |
[INFO] [stdout]  99 | / pub fn upgrade_building(
[INFO] [stdout] 100 | |     settlement: &mut Settlement,
[INFO] [stdout] 101 | |     building: Building,
[INFO] [stdout] 102 | |     now_tick: u64,
[INFO] [stdout] 103 | | ) -> Result<ScheduledEvent, AppError> {
[INFO] [stdout]     | |_____________________________________- this function returns a `Result`
[INFO] [stdout] 104 |       let currentLevel = settlement.building_levels.get(building)?;
[INFO] [stdout]     |                                                                  ^ use `.ok_or(...)?` to provide an error compatible with `Result<ScheduledEvent, AppError>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/rules.rs:104:55
[INFO] [stdout]     |
[INFO] [stdout] 104 |     let currentLevel = settlement.building_levels.get(building)?;
[INFO] [stdout]     |                                                   --- ^^^^^^^^ expected `&Building`, found `Building`
[INFO] [stdout]     |                                                   |
[INFO] [stdout]     |                                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> /rustc/3154cc1a3e6424e44f438a95007d043ed5ceaaf6/library/alloc/src/collections/btree/map.rs:727:11
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 104 |     let currentLevel = settlement.building_levels.get(&building)?;
[INFO] [stdout]     |                                                       +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: can't compare `&u8` with `u8`
[INFO] [stdout]    --> src/game/rules.rs:106:21
[INFO] [stdout]     |
[INFO] [stdout] 106 |     if currentLevel == spec(building).max_level {
[INFO] [stdout]     |                     ^^ no implementation for `&u8 == u8`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `PartialEq<u8>` is not implemented for `&u8`
[INFO] [stdout] help: consider dereferencing here
[INFO] [stdout]     |
[INFO] [stdout] 106 |     if *currentLevel == spec(building).max_level {
[INFO] [stdout]     |        +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in a function that returns `Result`
[INFO] [stdout]    --> src/game/rules.rs:104:64
[INFO] [stdout]     |
[INFO] [stdout]  99 | / pub fn upgrade_building(
[INFO] [stdout] 100 | |     settlement: &mut Settlement,
[INFO] [stdout] 101 | |     building: Building,
[INFO] [stdout] 102 | |     now_tick: u64,
[INFO] [stdout] 103 | | ) -> Result<ScheduledEvent, AppError> {
[INFO] [stdout]     | |_____________________________________- this function returns a `Result`
[INFO] [stdout] 104 |       let currentLevel = settlement.building_levels.get(building)?;
[INFO] [stdout]     |                                                                  ^ use `.ok_or(...)?` to provide an error compatible with `Result<ScheduledEvent, AppError>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/rules.rs:118:42
[INFO] [stdout]     |
[INFO] [stdout] 118 |         .subtract(upgrade_cost(building, currentLevel));
[INFO] [stdout]     |                   ------------           ^^^^^^^^^^^^ expected `u8`, found `&u8`
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/game/rules.rs:92:8
[INFO] [stdout]     |
[INFO] [stdout]  92 | pub fn upgrade_cost(building: Building, from_level: u8) -> Resources {
[INFO] [stdout]     |        ^^^^^^^^^^^^                     --------------
[INFO] [stdout] help: consider dereferencing the borrow
[INFO] [stdout]     |
[INFO] [stdout] 118 |         .subtract(upgrade_cost(building, *currentLevel));
[INFO] [stdout]     |                                          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/rules.rs:126:19
[INFO] [stdout]     |
[INFO] [stdout] 126 |         due_tick: now_tick.saturating_add(spec(building).base_build_ticks),
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i64`, found `u64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: can't compare `&u8` with `u8`
[INFO] [stdout]    --> src/game/rules.rs:106:21
[INFO] [stdout]     |
[INFO] [stdout] 106 |     if currentLevel == spec(building).max_level {
[INFO] [stdout]     |                     ^^ no implementation for `&u8 == u8`
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `PartialEq<u8>` is not implemented for `&u8`
[INFO] [stdout] help: consider dereferencing here
[INFO] [stdout]     |
[INFO] [stdout] 106 |     if *currentLevel == spec(building).max_level {
[INFO] [stdout]     |        +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/rules.rs:118:42
[INFO] [stdout]     |
[INFO] [stdout] 118 |         .subtract(upgrade_cost(building, currentLevel));
[INFO] [stdout]     |                   ------------           ^^^^^^^^^^^^ expected `u8`, found `&u8`
[INFO] [stdout]     |                   |
[INFO] [stdout]     |                   arguments to this function are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: function defined here
[INFO] [stdout]    --> src/game/rules.rs:92:8
[INFO] [stdout]     |
[INFO] [stdout]  92 | pub fn upgrade_cost(building: Building, from_level: u8) -> Resources {
[INFO] [stdout]     |        ^^^^^^^^^^^^                     --------------
[INFO] [stdout] help: consider dereferencing the borrow
[INFO] [stdout]     |
[INFO] [stdout] 118 |         .subtract(upgrade_cost(building, *currentLevel));
[INFO] [stdout]     |                                          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/game/rules.rs:126:19
[INFO] [stdout]     |
[INFO] [stdout] 126 |         due_tick: now_tick.saturating_add(spec(building).base_build_ticks),
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i64`, found `u64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `filter`
[INFO] [stdout]   --> src/api/game_router.rs:34:11
[INFO] [stdout]    |
[INFO] [stdout] 34 |     Query(filter): Query<GameFilter>,
[INFO] [stdout]    |           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_filter`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `filter`
[INFO] [stdout]   --> src/api/game_router.rs:34:11
[INFO] [stdout]    |
[INFO] [stdout] 34 |     Query(filter): Query<GameFilter>,
[INFO] [stdout]    |           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_filter`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state`
[INFO] [stdout]    --> src/game/rules.rs:130:25
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub fn storage_capacity(state: &GameState, settlement: SettlementId) -> i64 {
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `settlement`
[INFO] [stdout]    --> src/game/rules.rs:130:44
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub fn storage_capacity(state: &GameState, settlement: SettlementId) -> i64 {
[INFO] [stdout]     |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_settlement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state`
[INFO] [stdout]    --> src/game/rules.rs:130:25
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub fn storage_capacity(state: &GameState, settlement: SettlementId) -> i64 {
[INFO] [stdout]     |                         ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `settlement`
[INFO] [stdout]    --> src/game/rules.rs:130:44
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub fn storage_capacity(state: &GameState, settlement: SettlementId) -> i64 {
[INFO] [stdout]     |                                            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_settlement`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `state.tick` as immutable because it is also borrowed as mutable
[INFO] [stdout]    --> src/game/rules.rs:218:23
[INFO] [stdout]     |
[INFO] [stdout] 217 |         } => settlement_mut(state, settlement_id)
[INFO] [stdout]     |                             ----- mutable borrow occurs here
[INFO] [stdout] 218 |             .and_then(|settlement| upgrade_building(settlement, building, state.tick))
[INFO] [stdout]     |              -------- ^^^^^^^^^^^^ immutable borrow occurs here           ---------- second borrow occurs due to use of `state.tick` in closure
[INFO] [stdout]     |              |
[INFO] [stdout]     |              mutable borrow later used by call
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `state.tick` as immutable because it is also borrowed as mutable
[INFO] [stdout]    --> src/game/rules.rs:218:23
[INFO] [stdout]     |
[INFO] [stdout] 217 |         } => settlement_mut(state, settlement_id)
[INFO] [stdout]     |                             ----- mutable borrow occurs here
[INFO] [stdout] 218 |             .and_then(|settlement| upgrade_building(settlement, building, state.tick))
[INFO] [stdout]     |              -------- ^^^^^^^^^^^^ immutable borrow occurs here           ---------- second borrow occurs due to use of `state.tick` in closure
[INFO] [stdout]     |              |
[INFO] [stdout]     |              mutable borrow later used by call
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0277, E0282, E0308, E0432, E0502, E0599, E0609.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0277, E0282, E0308, E0432, E0502, E0599, E0609.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `vincite` (bin "vincite" test) due to 49 previous errors; 26 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: could not compile `vincite` (bin "vincite") due to 49 previous errors; 26 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b", kill_on_drop: false }`
[INFO] [stdout] 1da0cafeddcae47e87f25272f680966726f5fd3ff3b85fb4a4dfebd107585c5b
