use chrono::{DateTime, Utc};
#[derive(Debug)]
pub enum EventType {
LAN,
Online,
}
#[derive(Debug, PartialEq)]
pub enum MatchFormat {
Bo1,
Bo3,
Bo5,
Bo7,
}
#[derive(Default, Debug, PartialEq, Clone)]
pub struct Player {
pub id: u32,
pub nickname: String,
}
#[derive(Debug, PartialEq)]
pub struct Team {
pub id: u32,
pub name: String,
pub logo: String,
pub alt_logo: Option<String>,
}
impl Team {
pub fn new(id: u32, name: &str, logo: &str, alt_logo: Option<String>) -> Self {
Team {
id,
name: name.to_string(),
logo: logo.to_string(),
alt_logo,
}
}
}
#[derive(Debug, PartialEq)]
pub struct Event {
pub id: u32,
pub name: String,
}
pub struct EventDetails {
pub id: u32,
pub name: String,
pub start_date: DateTime<Utc>,
pub end_date: DateTime<Utc>,
pub price_pool: String,
}
#[derive(Debug)]
pub struct TeamPage {
pub id: u32,
pub name: String,
pub ranking: u32,
pub players: Vec<Player>,
pub logo: String,
}
#[derive(Debug)]
pub struct UpcomingMatch {
pub id: u32,
pub team1: Option<Team>,
pub team2: Option<Team>,
pub event: String,
pub format: MatchFormat,
pub date: DateTime<Utc>,
pub stars: u32,
}
#[derive(Debug, PartialEq)]
pub struct MatchResult {
pub id: u32,
pub winner: WhichTeam,
pub team1: String,
pub team2: String,
pub score: Score,
pub event: String,
pub format: MatchFormat,
}
#[derive(Debug, PartialEq)]
pub struct Score {
pub score_won: u32,
pub score_lost: u32,
}
#[derive(Debug, PartialEq)]
pub struct MatchPage {
pub id: u32,
pub status: MatchStatus,
pub team1: Option<Team>,
pub team2: Option<Team>,
pub event: Event,
pub date: DateTime<Utc>,
pub format: MatchFormat,
pub score: Option<MatchScore>,
pub maps: Vec<MapScore>,
pub stats: Vec<Performance>,
}
#[derive(Debug, PartialEq)]
pub enum MatchStatus {
Upcoming,
Finished,
Live,
}
#[derive(Default, Debug, PartialEq)]
pub enum WhichTeam {
#[default]
None,
First,
Second,
}
#[derive(Debug, PartialEq)]
pub struct MatchScore {
pub team1: u32,
pub team2: u32,
}
#[derive(Debug, PartialEq)]
pub struct MapScore {
pub map: Map,
pub team1: u32,
pub team2: u32,
}
impl MapScore {
pub fn new(map: Map, team1: u32, team2: u32) -> Self {
MapScore { map, team1, team2 }
}
}
#[derive(Debug, Default, PartialEq, Clone)]
pub struct Performance(pub Player, pub Stats);
#[derive(Debug, Default, PartialEq, Clone)]
pub struct Stats {
pub kills: u32,
pub deaths: u32,
pub adr: f32,
pub kast: f32,
pub rating: f32,
}
#[derive(Debug, Default, PartialEq)]
pub enum Map {
#[default]
Unknown,
Cache,
Season,
Dust2,
Mirage,
Inferno,
Nuke,
Train,
Cobblestone,
Overpass,
Tuscan,
Vertigo,
Ancient,
}
impl From<String> for Map {
fn from(s: String) -> Self {
use Map::*;
match s.as_ref() {
"Cache" => Cache,
"Season" => Season,
"Dust2" => Dust2,
"Mirage" => Mirage,
"Inferno" => Inferno,
"Nuke" => Nuke,
"Train" => Train,
"Cobblestone" => Cobblestone,
"Overpass" => Overpass,
"Tuscan" => Tuscan,
"Vertigo" => Vertigo,
"Ancient" => Ancient,
&_ => Unknown,
}
}
}
impl std::fmt::Display for Map {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Map::Unknown => write!(f, "n/a"),
Map::Cache => write!(f, "de_cache"),
Map::Season => write!(f, "de_season"),
Map::Dust2 => write!(f, "de_dust2"),
Map::Mirage => write!(f, "de_mirage"),
Map::Inferno => write!(f, "de_inferno"),
Map::Nuke => write!(f, "de_nuke"),
Map::Train => write!(f, "de_train"),
Map::Cobblestone => write!(f, "de_cobblestone"),
Map::Overpass => write!(f, "de_overpass"),
Map::Tuscan => write!(f, "de_tuscan"),
Map::Vertigo => write!(f, "de_vertigo"),
Map::Ancient => write!(f, "de_ancient"),
}
}
}