use serde::{Deserialize, Serialize};
use crate::v2::model::beatmapset::structs::covers::Covers;
use super::playlist_mod::PlaylistMod;
#[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 Playlist {
pub id: u32,
pub room_id: u32,
pub beatmap_id: u32,
pub ruleset_id: u32,
pub allowed_mods: Vec<PlaylistMod>,
pub required_mods: Vec<PlaylistMod>,
pub freestyle: bool,
pub expired: bool,
pub owner_id: u32,
pub playlist_order: Option<u32>,
pub played_at: Option<String>,
pub beatmap: Option<Beatmap>,
}
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(
feature = "export",
tsify(into_wasm_abi, from_wasm_abi, type_suffix = "InPlaylist")
)]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Beatmap {
pub beatmapset_id: u32,
pub difficulty_rating: f64,
pub id: u32,
pub mode: String,
pub status: String,
pub total_length: u32,
pub user_id: u32,
pub version: String,
#[cfg_attr(feature = "export", tsify(type = "BeatmapsetInPlaylist"))]
pub beatmapset: Beatmapset,
}
#[cfg_attr(feature = "export", derive(tsify::Tsify))]
#[cfg_attr(
feature = "export",
tsify(into_wasm_abi, from_wasm_abi, type_suffix = "InPlaylist")
)]
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Beatmapset {
pub artist: String,
pub artist_unicode: String,
#[cfg_attr(feature = "export", tsify(type = "Covers"))]
pub covers: Covers,
pub creator: String,
pub favourite_count: u32,
pub hype: Option<u32>,
pub id: u32,
pub nsfw: bool,
pub offset: u32,
pub play_count: u32,
pub preview_url: String,
pub source: String,
pub spotlight: bool,
pub status: String,
pub title: String,
pub title_unicode: String,
pub track_id: Option<u32>,
pub user_id: u32,
pub video: bool,
}
#[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 PlaylistItemStats {
pub count_active: u32,
pub count_total: u32,
pub ruleset_ids: Vec<u32>,
}