minesweeper_common/
protocol.rs1use serde::{Deserialize, Serialize};
2
3use crate::models::{Cell, GameParams, Pos};
4
5#[derive(Debug, Deserialize, Serialize)]
6#[serde(tag = "action")]
7pub enum ClientMessage {
8 #[serde(rename = "reveal")]
9 Reveal { pos: Pos },
10 #[serde(rename = "flag")]
11 Flag { pos: Pos },
12 #[serde(rename = "restart")]
13 Restart { params: GameParams },
14}
15
16#[derive(Serialize, Deserialize, Debug)]
17pub struct CellUpdate {
18 pub pos: Pos,
19 pub value: Cell,
20}
21
22#[derive(Serialize, Deserialize, Debug)]
23#[serde(tag = "type")]
24pub enum ServerMessage {
25 #[serde(rename = "init")]
26 Init {
27 width: usize,
28 height: usize,
29 bombs: usize,
30 field: Vec<Vec<Cell>>,
31 },
32 #[serde(rename = "update")]
33 Update {
34 updates: Vec<CellUpdate>,
35 won: bool,
36 lost: bool,
37 },
38}