/* * This file is part of laurelin_client * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use std::collections::HashMap; use serde::{Deserialize, Serialize}; use crate::api::game::{Action, Command}; mod parser; #[derive(Deserialize, Serialize, Clone)] pub struct CardAction { pub target: String, pub command: Command, pub seed: u64, } #[derive(Deserialize, Serialize, Clone)] pub struct Card { pub name: String, pub cost: u32, /// if set, use this? //vp_cost: Option, pub actions: Vec, } /// a supply pile holds an amount of some card pub struct SupplyPile { /// the card type that the supply pile holds pub card: Card, /// the amount of cards currently in the pile pub amount: usize, } pub struct PlayerStatus { pub hand: Vec, pub deck: Vec, pub discard: Vec, } /// constructed from a vector of [`Action`]s pub struct GameStatus { pub supply_piles: Vec, /// player ids mapped to statuses pub players: HashMap, } impl GameStatus { pub fn new(actions: &Vec) -> Self { match parser::parse(actions) { Ok(res) => res, Err(_) => panic!("parsing actions failed"), } } }