use crate::v2::model::user::structs::country::Country;
use crate::v2::model::user::structs::cover::Cover;
use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(feature = "export", tsify(into_wasm_abi, from_wasm_abi))]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Statistics {
pub count_100: u32,
pub count_300: u32,
pub count_50: u32,
pub count_miss: u32,
pub country_rank: Option<u32>,
pub level: Level,
pub global_rank: Option<u32>,
pub global_rank_percent: Option<f64>,
pub global_rank_exp: Option<u32>,
pub pp: f64,
pub pp_exp: Option<f64>,
pub ranked_score: u64,
pub hit_accuracy: f64,
pub play_count: u32,
pub play_time: u32,
pub total_score: u64,
pub total_hits: u64,
pub maximum_combo: u32,
pub replays_watched_by_others: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rank_change_since_30_days: Option<i32>,
pub is_ranked: bool,
pub grade_counts: GradeCounts,
pub rank: Option<Rank>,
pub variants: Option<Vec<Variant>>,
#[cfg_attr(feature = "export", tsify(type = "UserInStatistics | null"))]
pub user: Option<User>,
}
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(feature = "export", tsify(into_wasm_abi, from_wasm_abi))]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Level {
pub current: u32,
pub progress: u32,
}
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(feature = "export", tsify(into_wasm_abi, from_wasm_abi))]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GradeCounts {
pub ss: i32,
pub ssh: i32,
pub s: i32,
pub sh: i32,
pub a: i32,
}
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(feature = "export", tsify(into_wasm_abi, from_wasm_abi))]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Rank {
pub global: Option<u32>,
pub country: Option<u32>,
}
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(feature = "export", tsify(into_wasm_abi, from_wasm_abi))]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Variant {
pub country_rank: u32,
pub global_rank: u32,
pub mode: String,
pub pp: f64,
pub variant: String,
}
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(
feature = "export",
tsify(into_wasm_abi, from_wasm_abi, type_suffix = "InStatistics")
)]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct User {
pub avatar_url: String,
#[cfg_attr(feature = "export", tsify(type = "Country | null"))]
pub country: Option<Country>,
pub country_code: String,
#[cfg_attr(feature = "export", tsify(type = "Cover | null"))]
pub cover: Option<Cover>,
pub default_group: String,
pub id: u32,
pub is_active: bool,
pub is_bot: bool,
pub is_online: bool,
pub is_supporter: bool,
pub last_visit: Option<String>,
pub pm_friends_only: bool,
pub profile_colour: Option<String>,
pub username: String,
}