use serde::Deserialize;
use serde::Serialize;
use crate::ChampionRoles;
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Meta {
pub version: String,
pub match_count: Option<usize>,
pub cached_at: Option<String>,
pub analyzed_at: Option<String>,
pub cached_timestamp: Option<u64>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MetaEntry {
pub id: usize,
pub name: String,
pub title: String,
pub blurb: String,
pub image_url: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GameLength {
pub rate: Option<f32>,
pub rank: Option<usize>,
pub average: f32,
pub game_length: Option<usize>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Win {
pub version: String,
pub rate: f32,
pub rank: Option<usize>,
pub created_at: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Trends {
pub total_rank: usize,
pub total_position_rank: usize,
pub win: Vec<Win>,
pub ban: Vec<Win>,
pub pick: Vec<Win>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Skill {
pub play: usize,
pub win: usize,
pub pick_rate: f32,
pub order: Vec<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SkillMastery {
pub ids: Vec<String>,
pub play: usize,
pub win: usize,
pub pick_rate: f32,
pub builds: Vec<Skill>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Rune {
pub id: usize,
pub win: usize,
pub play: usize,
pub pick_rate: f32,
pub primary_page_id: usize,
pub secondary_page_id: usize,
pub primary_rune_ids: Vec<usize>,
pub secondary_rune_ids: Vec<usize>,
pub stat_mod_ids: Vec<usize>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RunePage {
pub id: usize,
pub win: usize,
pub play: usize,
pub pick_rate: f32,
pub primary_page_id: usize,
pub secondary_page_id: usize,
pub builds: Vec<Rune>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Item {
pub ids: Vec<usize>,
pub win: usize,
pub play: usize,
pub pick_rate: f32,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Stats {
pub win: Option<usize>,
pub play: usize,
pub win_rate: f32,
pub role_rate: f32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Role {
pub name: ChampionRoles,
pub stats: Stats,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TierData {
pub tier: usize,
pub rank: usize,
pub rank_prev: usize,
pub rank_prev_patch: Option<usize>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct AverageStats {
pub win_rate: f32,
pub pick_rate: f32,
pub kda: f32,
pub tier: usize,
pub rank: usize,
pub tier_data: TierData,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Counter {
pub champion_id: i64,
pub win: i64,
pub play: i64,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Position {
pub name: super::ChampionPosition,
pub stats: Stats,
pub roles: Vec<Role>,
pub counters: Vec<Counter>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Summary {
pub id: usize,
pub average_stats: AverageStats,
pub roles: Vec<Role>,
pub positions: Option<Vec<Position>>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Info {
pub summary: Summary,
pub summoner_spells: Vec<Item>,
pub core_items: Vec<Item>,
pub boots: Vec<Item>,
pub starter_items: Vec<Item>,
pub last_items: Vec<Item>,
pub rune_pages: Vec<RunePage>,
pub runes: Vec<Rune>,
pub skill_masteries: Vec<SkillMastery>,
pub skills: Vec<Skill>,
pub trends: Trends,
pub game_lengths: Vec<GameLength>,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
pub struct InfoResponse {
pub data: Info,
pub meta: Meta,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Response<T> {
pub meta: Meta,
pub data: T,
}