use uuid::Uuid;
#[derive(Debug, serde_derive::Deserialize)]
pub struct Category {
pub created_at: Box<str>,
pub id: Box<str>,
pub name: Box<str>,
pub updated_at: Box<str>,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct ChatMessage {
pub body: Box<str>,
pub created_at: Box<str>,
pub from_entrant: bool,
pub updated_at: Box<str>,
pub user: Runner,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct Entry {
pub created_at: Box<str>,
pub creator: Runner,
#[serde(default)]
pub finished_at: Option<Box<str>>,
#[serde(default)]
pub forfeited_at: Option<Box<str>>,
pub ghost: bool,
pub id: Uuid,
#[serde(default)]
pub readied_at: Option<Box<str>>,
pub run: Option<Run>,
pub runner: Runner,
pub updated_at: Box<str>,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct Game {
pub categories: Option<Vec<Category>>,
pub created_at: Box<str>,
pub id: Box<str>,
pub name: Box<str>,
#[serde(default)]
pub shortname: Option<Box<str>>,
pub updated_at: Box<str>,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct RunItemHistories {
pub attempt_number: u32,
pub gametime_duration_ms: f64,
pub realtime_duration_ms: f64,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct Run {
#[serde(default)]
pub attempts: Option<u32>,
pub category: Option<Category>,
pub created_at: Box<str>,
pub default_timing: Box<str>,
pub game: Option<Game>,
#[serde(default)]
pub gametime_duration_ms: Option<f64>,
#[serde(default)]
pub gametime_sum_of_best_ms: Option<f64>,
pub histories: Option<Vec<RunItemHistories>>,
#[serde(default)]
pub id: Option<Box<str>>,
#[serde(default)]
pub image_url: Option<Box<str>>,
pub program: Box<str>,
#[serde(default)]
pub realtime_duration_ms: Option<f64>,
#[serde(default)]
pub realtime_sum_of_best_ms: Option<f64>,
pub runners: Vec<Runner>,
pub segments: Vec<Segment>,
#[serde(default)]
pub srdc_id: Option<Box<str>>,
pub updated_at: Box<str>,
#[serde(default)]
pub video_url: Option<Box<str>>,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct Runner {
#[serde(default)]
pub avatar: Option<Box<str>>,
pub created_at: Box<str>,
pub display_name: Option<Box<str>>,
pub id: Box<str>,
pub name: Box<str>,
pub twitch_id: Option<Box<str>>,
pub twitch_name: Option<Box<str>>,
pub updated_at: Box<str>,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct SegmentItemHistories {
pub attempt_number: u32,
pub gametime_duration_ms: f64,
pub realtime_duration_ms: f64,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct Segment {
#[serde(default)]
pub gametime_duration_ms: Option<f64>,
#[serde(default)]
pub gametime_end_ms: Option<f64>,
pub gametime_gold: bool,
pub gametime_reduced: bool,
#[serde(default)]
pub gametime_shortest_duration_ms: Option<f64>,
pub gametime_skipped: bool,
#[serde(default)]
pub gametime_start_ms: Option<f64>,
pub histories: Option<Vec<SegmentItemHistories>>,
pub id: Uuid,
pub name: Box<str>,
pub realtime_duration_ms: f64,
pub realtime_end_ms: f64,
pub realtime_gold: bool,
pub realtime_reduced: bool,
#[serde(default)]
pub realtime_shortest_duration_ms: Option<f64>,
pub realtime_skipped: bool,
pub realtime_start_ms: f64,
pub segment_number: u32,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct Race {
pub attachments: Vec<Attachment>,
pub category: Option<Category>,
pub chat_messages: Vec<ChatMessage>,
pub created_at: Box<str>,
pub entries: Vec<Entry>,
pub game: Option<Game>,
pub id: Uuid,
pub join_token: Option<Box<str>>,
pub notes: Option<Box<str>>,
pub owner: Runner,
pub path: Box<str>,
pub started_at: Option<Box<str>>,
pub updated_at: Box<str>,
pub visibility: Visibility,
}
#[derive(Debug, serde_derive::Deserialize)]
pub struct Attachment {
pub id: Uuid,
pub created_at: Box<str>,
pub filename: Box<str>,
pub url: Box<str>,
}
#[derive(Copy, Clone, Debug, serde_derive::Deserialize, serde_derive::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum Visibility {
Public,
InviteOnly,
Secret,
}