1use super::helpers::{de_num_or_str, de_opt_num_or_str};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
9pub struct Map {
10 #[serde(default)]
12 pub mode: String,
13 #[serde(default)]
15 pub name: String,
16 #[serde(default)]
18 pub phase: MapPhase,
19 #[serde(default, deserialize_with = "de_num_or_str")]
21 pub round: u32,
22 #[serde(default, alias = "team_ct")]
24 pub team_ct: TeamStatistics,
25 #[serde(default, alias = "team_t")]
27 pub team_t: TeamStatistics,
28 #[serde(default, deserialize_with = "de_opt_num_or_str")]
30 pub num_matches_to_win_series: Option<u32>,
31 #[serde(default, deserialize_with = "de_opt_num_or_str")]
33 pub current_spectators: Option<u32>,
34 #[serde(default, deserialize_with = "de_opt_num_or_str")]
36 pub souvenirs_total: Option<u32>,
37 #[serde(default)]
40 pub round_wins: HashMap<String, String>,
41}
42
43#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, PartialEq, Eq, Hash)]
45#[serde(rename_all = "lowercase")]
46pub enum MapPhase {
47 Warmup,
49 Live,
51 Intermission,
53 Gameover,
55 #[serde(other)]
57 #[default]
58 Unknown,
59}
60
61#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq, Eq)]
63pub struct TeamStatistics {
64 #[serde(default, deserialize_with = "de_num_or_str")]
66 pub score: u32,
67 #[serde(default, deserialize_with = "de_num_or_str")]
69 pub consecutive_round_losses: u32,
70 #[serde(default, deserialize_with = "de_num_or_str")]
72 pub timeouts_remaining: u32,
73 #[serde(default, deserialize_with = "de_num_or_str")]
75 pub matches_won_this_series: u32,
76 #[serde(default)]
78 pub name: String,
79 #[serde(default)]
81 pub flag: String,
82}