mahjong_core/table/
mod.rs

1pub use self::draw_wall::{DrawWall, DrawWallPlace, PositionTilesOpts};
2use crate::{Hands, PlayerId, TileId};
3use rustc_hash::FxHashMap;
4use serde::{Deserialize, Serialize};
5use ts_rs::TS;
6
7mod draw_wall;
8
9#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, TS)]
10#[ts(export)]
11pub struct Board(pub Vec<TileId>);
12
13#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, TS)]
14#[ts(export)]
15pub struct BonusTiles(pub FxHashMap<PlayerId, Vec<TileId>>);
16
17#[derive(Clone, Debug, Serialize, Deserialize, TS)]
18#[ts(export)]
19pub struct Table {
20    pub board: Board,
21    pub draw_wall: DrawWall,
22    pub hands: Hands,
23    pub bonus_tiles: BonusTiles,
24}
25
26// Proxied
27impl Board {
28    pub fn len(&self) -> usize {
29        self.0.len()
30    }
31    pub fn is_empty(&self) -> bool {
32        self.0.is_empty()
33    }
34}
35
36impl BonusTiles {
37    pub fn get_or_create(&mut self, player_id: &PlayerId) -> &mut Vec<TileId> {
38        self.0.entry(player_id.clone()).or_default()
39    }
40}