use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
pub struct User {
pub username: String,
pub name: String,
pub honor: u64,
pub clan: String,
#[serde(rename = "leaderboardPosition")]
pub leaderboard_position: u64,
pub skills: Vec<String>,
pub ranks: Ranks,
#[serde(rename = "codeChallenges")]
pub code_challenges: CodeChallenges,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct CodeChallenges {
#[serde(rename = "totalAuthored")]
pub total_authored: u64,
#[serde(rename = "totalCompleted")]
pub total_completed: u64,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
pub struct Ranks {
pub overall: Rank,
pub languages: HashMap<String, Rank>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Clone)]
pub struct Rank {
pub rank: i8,
pub name: String,
pub color: Color,
pub score: u64,
}
#[derive(
Serialize,
Deserialize,
Debug,
PartialEq,
Eq,
Hash,
Clone,
strum::Display,
strum::IntoStaticStr,
strum::AsRefStr,
strum::EnumString,
strum::EnumCount,
strum::EnumIter,
)]
pub enum Color {
#[serde(rename = "white")]
White,
#[serde(rename = "yellow")]
Yellow,
#[serde(rename = "blue")]
Blue,
#[serde(rename = "purple")]
Purple,
#[serde(rename = "black")]
Black,
#[serde(rename = "red")]
Red,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct AuthoredChallenge {
pub id: String,
pub name: String,
pub description: String,
#[serde(flatten)]
pub rank: Option<i8>,
#[serde(rename = "rankName", flatten)]
pub rank_name: Option<String>,
pub tags: Vec<String>,
pub languages: Vec<String>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct AuthoredChallenges {
pub data: Vec<AuthoredChallenge>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct CodeChallenge {
pub id: String,
pub name: String,
pub slug: String,
pub url: String,
pub category: String,
pub description: String,
pub tags: Vec<String>,
pub languages: Vec<String>,
#[serde(flatten)]
pub rank: Option<Rank>,
#[serde(rename = "createdBy")]
pub created_by: Author,
#[serde(rename = "publishedAt")]
pub published_at: String,
#[serde(rename = "approvedBy", flatten)]
pub approved_by: Option<Author>,
#[serde(rename = "approvedAt")]
pub approved_at: String,
#[serde(rename = "totalCompleted")]
pub total_completed: u64,
#[serde(rename = "totalAttempts")]
pub total_attempts: u64,
#[serde(rename = "totalStars")]
pub total_stars: u64,
#[serde(rename = "voteScore")]
pub vote_score: u64,
#[serde(rename = "contributorsWanted")]
pub contributors_wanted: bool,
pub unresolved: Unresolved,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct Author {
pub username: String,
pub url: String,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct Unresolved {
pub issues: u64,
pub suggestions: u64,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct CompletedChallenges {
#[serde(rename = "totalPages")]
pub total_pages: u64,
#[serde(rename = "totalItems")]
pub total_items: u64,
pub data: Vec<CompletedChallenge>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash, Default, Clone)]
pub struct CompletedChallenge {
pub id: String,
pub name: String,
pub slug: String,
#[serde(rename = "completedAt")]
pub completed_at: String,
#[serde(rename = "completedLanguages")]
pub completed_languages: Vec<String>,
}