opgg 0.1.0

Rust asynchronous client for accessing the hero statistics API provided by [OP.GG](https://op.gg).
Documentation
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,
}