use super::action::*;
use crate::{
cards::card::CardData,
game::{
error::{ActionError, GameError},
rules::GameRules,
state::GameState,
},
};
pub trait Game {
type Rules: GameRules;
fn execute_action(&mut self, action: GameAction) -> Result<(), ActionError>;
fn get_state(
&self,
) -> &GameState<<<Self as Game>::Rules as GameRules>::VariantScore, Self::Rules>;
fn quit_player(&mut self, player_id: usize) -> Result<(), GameError>;
fn add_player(&mut self, player_id: usize) -> Result<(), GameError>;
fn rearrange_player_hand(
&mut self,
player_id: usize,
new_arrangement: Vec<CardData>,
) -> Result<(), GameError>;
fn next_round(&mut self) -> Result<(), GameError>;
}