/* * This file is part of laurelin_client * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use serde::{Deserialize, Serialize}; use serde_repr::Deserialize_repr; use crate::game_status::Card; use super::user::User; mod forming; pub use forming::*; mod my_games; pub use my_games::*; mod join; pub use join::*; mod create; pub use create::*; mod create_action; pub use create_action::*; mod details; pub use details::*; #[derive(Deserialize, Serialize, Clone)] pub enum Command { InitSupplyPile { card: Card, amount: usize }, /// take a card from pile N TakeFromPile { index: usize }, /// draw N amount of cards from deck Draw { amount: usize }, /// discard card from hand in slot N Discard { index: usize }, } #[derive(Deserialize, Serialize, Clone)] pub struct Action { pub id: String, pub created_at: String, pub updated_at: String, pub game_id: String, pub invoker: String, pub target: String, pub command: Command, pub seed: u64, } impl Action { pub fn new( game_id: &str, invoker: &str, target: &str, command: &Command, seed: u64 ) -> Self { Self { id: "".to_string(), created_at: "".to_string(), updated_at: "".to_string(), game_id: game_id.to_string(), invoker: invoker.to_string(), target: target.to_string(), command: command.clone(), seed, } } } #[derive(Debug, Deserialize_repr, Clone, PartialEq)] #[repr(u8)] pub enum GameState { Forming = 0, InProgress= 1, Finished = 2, Cancelled = 3, } #[derive(Deserialize, Clone)] pub struct Game { pub id: String, pub created_at: String, pub updated_at: String, pub ended_at: String, pub host_id: String, pub host: Option, pub guest_id: String, pub guest: Option, pub state: GameState, pub turn: u8, pub actions: Option>, }