use chrono::{serde::ts_seconds_option, DateTime, Utc};
use serde::Deserialize;
#[cfg(feature = "serialize")]
use serde::Serialize;
pub mod requests;
#[cfg(test)]
mod tests;
use crate::types::{Phase, Season};
use super::LeaderboardUser;
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PhaseInfo {
pub number: Option<Phase>,
#[serde(with = "ts_seconds_option")]
pub ends_at: Option<DateTime<Utc>>,
pub season: Season,
}
#[cfg_attr(feature = "serialize", derive(Serialize))]
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PhaseLeaderboardInfo {
pub phase: PhaseInfo,
pub users: Box<[LeaderboardUser]>,
}
impl PhaseLeaderboardInfo {
pub fn users(&self) -> &[LeaderboardUser] {
&self.users
}
}