use chrono::{serde::ts_seconds, DateTime, Utc};
use serde::Deserialize;
#[cfg(feature = "serialize")]
use serde::Serialize;
#[cfg(feature = "weekly_races")]
use crate::types::WeeklyRaceId;
use crate::{
helpers::string_u64,
types::{MinecraftSeed, Rank, Time},
user::UserProfile,
};
pub mod requests;
pub mod result;
#[cfg(test)]
pub mod tests;
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WeeklyRaceSeedInfo {
#[serde(with = "string_u64")]
pub overworld: MinecraftSeed,
#[serde(with = "string_u64")]
pub nether: MinecraftSeed,
#[serde(with = "string_u64")]
pub the_end: MinecraftSeed,
#[serde(with = "string_u64")]
pub rng: MinecraftSeed,
}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WeeklyRaceLeaderboardRecord {
pub rank: Rank,
pub player: UserProfile,
pub time: Time,
#[serde(rename = "replayExist")]
pub replay_exists: bool,
}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WeeklyRaceLeaderboardInfo {
pub id: WeeklyRaceId,
pub seed: WeeklyRaceSeedInfo,
#[serde(with = "ts_seconds")]
pub ends_at: DateTime<Utc>,
pub leaderboard: Box<[WeeklyRaceLeaderboardRecord]>,
}
impl WeeklyRaceLeaderboardInfo {
pub fn leaderboard(&self) -> &[WeeklyRaceLeaderboardRecord] {
&self.leaderboard
}
}