#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct DailyGame {
#[serde(rename = "white")]
pub white: String,
#[serde(rename = "black")]
pub black: String,
#[serde(rename = "url")]
pub url: String,
#[serde(rename = "fen")]
pub fen: String,
#[serde(rename = "pgn")]
pub pgn: String,
#[serde(rename = "turn")]
pub turn: crate::models::Player,
#[serde(rename = "move_by", skip_serializing_if = "Option::is_none")]
#[serde(with = "chrono::serde::ts_seconds_option")]
pub move_by: Option<chrono::DateTime<chrono::Utc>>,
#[serde(rename = "draw_offer", skip_serializing_if = "Option::is_none")]
pub draw_offer: Option<crate::models::Player>,
#[serde(rename = "last_activity")]
#[serde(with = "chrono::serde::ts_seconds")]
pub last_activity: chrono::DateTime<chrono::Utc>,
#[serde(rename = "start_time", skip_serializing_if = "Option::is_none")]
#[serde(with = "chrono::serde::ts_seconds_option")]
pub start_time: Option<chrono::DateTime<chrono::Utc>>,
#[serde(rename = "time_control")]
pub time_control: String,
#[serde(rename = "time_class")]
pub time_class: TimeClass,
#[serde(rename = "rules")]
pub rules: Rules,
#[serde(rename = "tournament", skip_serializing_if = "Option::is_none")]
pub tournament: Option<String>,
#[serde(rename = "match", skip_serializing_if = "Option::is_none")]
pub _match: Option<String>,
}
impl DailyGame {
pub fn new(white: String, black: String, url: String, fen: String, pgn: String, turn: crate::models::Player, last_activity: chrono::DateTime<chrono::Utc>, time_control: String, time_class: TimeClass, rules: Rules) -> DailyGame {
DailyGame {
white,
black,
url,
fen,
pgn,
turn,
move_by: None,
draw_offer: None,
last_activity,
start_time: None,
time_control,
time_class,
rules,
tournament: None,
_match: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum TimeClass {
#[serde(rename = "daily")]
Daily,
#[serde(rename = "rapid")]
Rapid,
#[serde(rename = "blitz")]
Blitz,
#[serde(rename = "bullet")]
Bullet,
}
impl std::fmt::Display for TimeClass {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
TimeClass::Daily => write!(f, "daily"),
TimeClass::Rapid => write!(f, "rapid"),
TimeClass::Blitz => write!(f, "blitz"),
TimeClass::Bullet => write!(f, "bullet"),
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Rules {
#[serde(rename = "chess")]
Chess,
#[serde(rename = "chess960")]
Chess960,
#[serde(rename = "bughouse")]
Bughouse,
#[serde(rename = "kingofthehill")]
Kingofthehill,
#[serde(rename = "threecheck")]
Threecheck,
#[serde(rename = "crazyhouse")]
Crazyhouse,
}
impl std::fmt::Display for Rules {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Rules::Chess => write!(f, "chess"),
Rules::Chess960 => write!(f, "chess960"),
Rules::Bughouse => write!(f, "bughouse"),
Rules::Kingofthehill => write!(f, "kingofthehill"),
Rules::Threecheck => write!(f, "threecheck"),
Rules::Crazyhouse => write!(f, "crazyhouse"),
}
}
}