minesweeper_common/
protocol.rs

1use 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}