use crate::utils::functions::{de_milliseconds, se_milliseconds};
use crate::utils::validators::valid_uuid;
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
use uuid::Uuid;
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct CompetitveUpdatesV1 {
pub version: u32,
pub subject: Uuid,
pub matches: Vec<CompetitiveUpdateMatches>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct CompetitiveUpdateMatches {
#[serde(rename = "MatchID")]
pub match_id: Uuid,
#[serde(rename = "MapID")]
pub map_id: String,
#[serde(rename = "SeasonID")]
#[serde(deserialize_with = "valid_uuid")]
pub season_id: Option<Uuid>,
#[serde(rename = "MatchStartTime")]
#[serde(deserialize_with = "de_milliseconds")]
#[serde(serialize_with = "se_milliseconds")]
pub match_start_time: OffsetDateTime,
pub tier_after_update: u8,
pub tier_before_update: u8,
pub ranked_rating_after_update: u32,
pub ranked_rating_before_update: u32,
pub ranked_rating_earned: i32,
pub ranked_rating_performance_bonus: u32,
pub competitive_movement: String,
#[serde(rename = "AFKPenalty")]
pub afk_penalty: i32,
}