use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LichessActivityInterval {
pub start: i64,
pub end: i64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LichessActivityScoreProgress {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub before: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub after: Option<i32>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LichessActivityScore {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub win: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub loss: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub draw: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rp: Option<LichessActivityScoreProgress>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LichessActivityPuzzles {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub score: Option<LichessActivityScore>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LichessActivityTournament {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct LichessActivityTournamentResult {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tournament: Option<LichessActivityTournament>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub nb_games: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub score: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rank: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rank_percent: Option<u32>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LichessActivityTournaments {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub nb: Option<u32>,
#[serde(default)]
pub best: Vec<LichessActivityTournamentResult>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct LichessActivity {
pub interval: LichessActivityInterval,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub games: Option<HashMap<String, LichessActivityScore>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub puzzles: Option<LichessActivityPuzzles>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tournaments: Option<LichessActivityTournaments>,
#[serde(flatten)]
pub other: HashMap<String, Value>,
}