use super::helpers::{de_num_or_str, de_opt_num_or_str};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct Map {
#[serde(default)]
pub mode: String,
#[serde(default)]
pub name: String,
#[serde(default)]
pub phase: MapPhase,
#[serde(default, deserialize_with = "de_num_or_str")]
pub round: u32,
#[serde(default, alias = "team_ct")]
pub team_ct: TeamStatistics,
#[serde(default, alias = "team_t")]
pub team_t: TeamStatistics,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub num_matches_to_win_series: Option<u32>,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub current_spectators: Option<u32>,
#[serde(default, deserialize_with = "de_opt_num_or_str")]
pub souvenirs_total: Option<u32>,
#[serde(default)]
pub round_wins: HashMap<String, String>,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum MapPhase {
Warmup,
Live,
Intermission,
Gameover,
#[serde(other)]
#[default]
Unknown,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
pub struct TeamStatistics {
#[serde(default, deserialize_with = "de_num_or_str")]
pub score: u32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub consecutive_round_losses: u32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub timeouts_remaining: u32,
#[serde(default, deserialize_with = "de_num_or_str")]
pub matches_won_this_series: u32,
#[serde(default)]
pub name: String,
#[serde(default)]
pub flag: String,
}