2025-06-23 09:48:28 +01:00
|
|
|
pub mod host;
|
|
|
|
|
mod ident;
|
|
|
|
|
pub mod night;
|
|
|
|
|
|
|
|
|
|
use core::{fmt::Display, num::NonZeroU8};
|
|
|
|
|
|
|
|
|
|
pub use ident::*;
|
2025-09-28 02:13:34 +01:00
|
|
|
use night::{ActionPrompt, ActionResponse, ActionResult};
|
2025-06-23 09:48:28 +01:00
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
|
|
|
|
|
use crate::{
|
|
|
|
|
error::GameError,
|
|
|
|
|
game::GameOver,
|
|
|
|
|
player::{Character, CharacterId},
|
|
|
|
|
role::RoleTitle,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
|
|
|
|
|
pub enum ClientMessage {
|
|
|
|
|
Hello,
|
|
|
|
|
Goodbye,
|
|
|
|
|
GetState,
|
|
|
|
|
RoleAck,
|
|
|
|
|
UpdateSelf(UpdateSelf),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
|
|
|
|
|
pub enum UpdateSelf {
|
|
|
|
|
Name(String),
|
|
|
|
|
Number(NonZeroU8),
|
|
|
|
|
Pronouns(Option<String>),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
|
pub struct DayCharacter {
|
|
|
|
|
pub character_id: CharacterId,
|
|
|
|
|
pub name: String,
|
|
|
|
|
pub alive: bool,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
|
pub enum ServerMessage {
|
|
|
|
|
Disconnect,
|
|
|
|
|
LobbyInfo {
|
|
|
|
|
joined: bool,
|
|
|
|
|
players: Box<[PublicIdentity]>,
|
|
|
|
|
},
|
|
|
|
|
GameInProgress,
|
|
|
|
|
GameStart {
|
|
|
|
|
role: RoleTitle,
|
|
|
|
|
},
|
|
|
|
|
InvalidMessageForGameState,
|
|
|
|
|
NoSuchTarget,
|
|
|
|
|
GameOver(GameOver),
|
|
|
|
|
Update(PlayerUpdate),
|
|
|
|
|
Sleep,
|
|
|
|
|
Reset,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
|
|
|
pub enum PlayerUpdate {
|
|
|
|
|
Number(NonZeroU8),
|
|
|
|
|
}
|