use crate::client::endpoints::Endpoint;
use crate::client::BrawlClient;
use crate::errors::BrawlError;
use crate::models::common::{BrawlerGear, Item};
use serde::Deserialize;
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Player {
pub tag: String,
pub name: String,
pub name_color: String,
pub trophies: u64,
pub highest_trophies: u64,
pub total_prestige_level: u16,
pub exp_level: u16,
pub exp_points: u64,
#[serde(rename = "3vs3Victories")]
pub victories_3v3: u64,
pub solo_victories: u64,
pub duo_victories: u64,
pub club: PlayerClub,
pub brawlers: Vec<Brawler>,
}
#[derive(Deserialize)]
pub struct PlayerClub {
pub tag: Option<String>,
pub name: Option<String>,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Brawler {
pub id: u64,
pub name: String,
pub power: u8,
pub rank: u32,
pub trophies: u32,
pub highest_trophies: u64,
pub prestige_level: u16,
pub current_win_streak: u32,
pub max_win_streak: u32,
pub skin: BrawlerSkin,
#[serde(default)]
pub gadgets: Vec<Item>,
#[serde(default)]
pub gears: Vec<BrawlerGear>,
#[serde(default)]
pub star_powers: Vec<Item>,
#[serde(default)]
pub hyper_charges: Vec<Item>,
pub buffies: BrawlerBuffie,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BrawlerBuffie {
pub gadget: bool,
pub star_power: bool,
pub hyper_charge: bool,
}
#[derive(Deserialize)]
pub struct BrawlerSkin {
pub id: u64,
pub name: String,
}
impl Player {
pub async fn get(client: &BrawlClient, tag: &str) -> Result<Self, BrawlError> {
let endpoint = Endpoint::Player(tag.to_string());
client.fetch::<Self>(endpoint).await
}
}