use crate::cards::card::CardData;
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum GameInteractions {
Action(GameAction),
PlayerJoin {
player_id: usize,
},
PlayerQuit {
player_id: usize,
},
HandRearrangement {
player_id: usize,
new_arrangement: Vec<CardData>,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum GameAction {
DrawDeck(DrawDeckAction),
DrawDiscardPile(DrawDiscardPileAction),
LayOff(LayOffAction),
FormMeld(FormMeldAction),
FormMelds(FormMeldsAction),
Discard(DiscardAction),
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DrawDeckAction {}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DrawDiscardPileAction {
pub count: Option<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LayOffAction {
pub card_index: usize,
pub target_player_index: usize,
pub target_meld_index: usize,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FormMeldAction {
pub card_indices: Vec<usize>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FormMeldsAction {
pub melds: Vec<Vec<usize>>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DiscardAction {
pub card_index: usize,
pub declare_going_out: Option<bool>,
}