use crate::client::param::record_leaderboard::{RecordsLeaderboardId, Scope};
use crate::model::prelude::*;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Hash)]
#[non_exhaustive]
pub struct RecordLeaderboard(pub String);
impl RecordLeaderboard {
pub fn to_id(&self) -> RecordsLeaderboardId {
self._to_id(None)
}
pub fn to_id_with_revolution_id(&self, revolution_id: &str) -> RecordsLeaderboardId {
self._to_id(Some(revolution_id))
}
fn _to_id(&self, revolution_id: Option<&str>) -> RecordsLeaderboardId {
let split_id: Vec<&str> = self.0.split('_').collect();
let gamemode = split_id[0];
let scope = match split_id[1] {
"global" => Scope::Global,
_ => Scope::Country(split_id[2].to_string()),
};
RecordsLeaderboardId::new(gamemode, scope, revolution_id)
}
}
impl AsRef<RecordLeaderboard> for RecordLeaderboard {
fn as_ref(&self) -> &Self {
self
}
}
impl fmt::Display for RecordLeaderboard {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.0)
}
}