mod auth;
mod bomb;
mod grenade;
mod helpers;
mod map;
mod player;
mod provider;
mod round;
mod tournament;
pub use auth::Auth;
pub use bomb::{Bomb, BombState};
pub use grenade::{Grenade, GrenadeKind};
pub use map::{Map, MapPhase, TeamStatistics};
pub use player::{
MatchStats, Player, PlayerActivity, PlayerState, PlayerTeam, Weapon, WeaponKind, WeaponState,
};
pub use provider::Provider;
pub use round::{BombRoundState, Round, RoundPhase, WinningTeam};
pub use tournament::{PhaseCountdowns, TournamentDraft};
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
pub struct GameState {
#[serde(default)]
pub auth: Auth,
#[serde(default)]
pub provider: Provider,
#[serde(default)]
pub map: Option<Map>,
#[serde(default)]
pub round: Option<Round>,
#[serde(default)]
pub player: Option<Player>,
#[serde(default)]
pub allplayers: BTreeMap<String, Player>,
#[serde(default, rename = "phase_countdowns")]
pub phase_countdowns: Option<PhaseCountdowns>,
#[serde(default)]
pub bomb: Option<Bomb>,
#[serde(default, alias = "allgrenades")]
pub grenades: BTreeMap<String, Grenade>,
#[serde(default, alias = "tournamentdraft")]
pub tournament_draft: Option<TournamentDraft>,
#[serde(default)]
pub previously: Option<serde_json::Value>,
#[serde(default)]
pub added: Option<serde_json::Value>,
}
impl GameState {
pub fn from_slice(bytes: &[u8]) -> Result<Self, serde_json::Error> {
serde_json::from_slice(bytes)
}
#[allow(clippy::should_implement_trait)]
pub fn from_str(s: &str) -> Result<Self, serde_json::Error> {
serde_json::from_str(s)
}
pub fn local_is_dead(&self) -> bool {
match &self.player {
Some(p) => matches!(p.activity, PlayerActivity::Playing) && p.state.health == 0,
None => false,
}
}
}