···23- [x] Transport : Handle transport cancellation better
24- [x] Backend : Add checks for when the `powerup_locations` field is an empty array in settings
25- [ ] Backend : More tests
26- - [ ] Lobby tests
27- - [ ] Game end test for actual return from loop
28 - [ ] Testing crate for integration testing from a DSL
29 - [ ] NixOS VM tests wrapping the testing crate
30- [ ] Nix : Cheat the dependency nightmare and use crane
···23- [x] Transport : Handle transport cancellation better
24- [x] Backend : Add checks for when the `powerup_locations` field is an empty array in settings
25- [ ] Backend : More tests
26+ - [x] Lobby tests
27+ - [x] Game end test for actual return from loop
28 - [ ] Testing crate for integration testing from a DSL
29 - [ ] NixOS VM tests wrapping the testing crate
30- [ ] Nix : Cheat the dependency nightmare and use crane
+1-1
backend/Cargo.toml
···3version = "0.1.0"
4description = "A mobile app for playing the game \"manhunt\""
5authors = ["Ben C <bwc9876@gmail.com>"]
6-edition = "2021"
7default-run = "manhunt-app"
89[lib]
···3version = "0.1.0"
4description = "A mobile app for playing the game \"manhunt\""
5authors = ["Ben C <bwc9876@gmail.com>"]
6+edition = "2024"
7default-run = "manhunt-app"
89[lib]
+3-1
backend/src/export_types.rs
···8 let path = args.get(1).expect("Usage: export-types path");
9 let specta = mk_specta();
10 let mut lang = Typescript::new();
11- lang.header = Cow::Borrowed("/* eslint @typescript-eslint/no-unused-vars: 0 */\n/* eslint @typescript-eslint/no-explicit-any: 0 */");
0012 specta.export(lang, path).expect("Failed to export types");
13 println!("Successfully exported types, events, and commands to {path}",);
14}
···8 let path = args.get(1).expect("Usage: export-types path");
9 let specta = mk_specta();
10 let mut lang = Typescript::new();
11+ lang.header = Cow::Borrowed(
12+ "/* eslint @typescript-eslint/no-unused-vars: 0 */\n/* eslint @typescript-eslint/no-explicit-any: 0 */",
13+ );
14 specta.export(lang, path).expect("Failed to export types");
15 println!("Successfully exported types, events, and commands to {path}",);
16}
+4-4
backend/src/lib.rs
···67use anyhow::Context;
8use location::TauriLocation;
9-use log::{error, info, warn, LevelFilter};
10use manhunt_logic::{
11 Game as BaseGame, GameSettings, GameUiState, Lobby as BaseLobby, LobbyState, PlayerProfile,
12 StartGameInfo, StateUpdateSender,
13};
14-use manhunt_transport::{generate_join_code, room_exists, MatchboxTransport};
15use serde::{Deserialize, Serialize};
16use tauri::{AppHandle, Manager, State};
17use tauri_plugin_dialog::{DialogExt, MessageDialogKind};
18-use tauri_specta::{collect_commands, collect_events, ErrorHandlingMode, Event};
19use tokio::sync::RwLock;
20use uuid::Uuid;
21···213 let mut state = state_handle.write().await;
214 match res {
215 Ok(Some(start)) => {
216- info!("Starting game as");
217 state.start_game(app_game, start).await;
218 }
219 Ok(None) => {