minesweeper-common 1.0.0

Shared types and protocol definitions for minesweeper client/server
Documentation
use serde::{Deserialize, Serialize};

use crate::models::{Cell, GameParams, Pos};

#[derive(Debug, Deserialize, Serialize)]
#[serde(tag = "action")]
pub enum ClientMessage {
    #[serde(rename = "reveal")]
    Reveal { pos: Pos },
    #[serde(rename = "flag")]
    Flag { pos: Pos },
    #[serde(rename = "restart")]
    Restart { params: GameParams },
}

#[derive(Serialize, Deserialize, Debug)]
pub struct CellUpdate {
    pub pos: Pos,
    pub value: Cell,
}

#[derive(Serialize, Deserialize, Debug)]
#[serde(tag = "type")]
pub enum ServerMessage {
    #[serde(rename = "init")]
    Init {
        width: usize,
        height: usize,
        bombs: usize,
        field: Vec<Vec<Cell>>,
    },
    #[serde(rename = "update")]
    Update {
        updates: Vec<CellUpdate>,
        won: bool,
        lost: bool,
    },
}