speedrun_api/types/
games.rs

1use std::collections::HashMap;
2
3use serde::Deserialize;
4
5use crate::api::{
6    developers::DeveloperId, engines::EngineId, games::GameId, gametypes::GameTypeId,
7    genres::GenreId, platforms::PlatformId, publishers::PublisherId, regions::RegionId,
8    users::UserId,
9};
10
11use super::{Assets, Link, ModeratorRole, Names, TimingMethod};
12
13#[derive(Debug, Clone, PartialEq, Deserialize)]
14#[serde(rename_all = "kebab-case")]
15pub struct Game<'a> {
16    pub id: GameId<'a>,
17    pub names: Names,
18    pub abbreviation: String,
19    pub weblink: String,
20    pub release_date: String,
21    pub ruleset: Ruleset,
22    pub gametypes: Vec<GameTypeId<'a>>,
23    pub platforms: Vec<PlatformId<'a>>,
24    pub regions: Vec<RegionId<'a>>,
25    pub genres: Vec<GenreId<'a>>,
26    pub engines: Vec<EngineId<'a>>,
27    pub developers: Vec<DeveloperId<'a>>,
28    pub publishers: Vec<PublisherId<'a>>,
29    pub moderators: HashMap<UserId<'a>, ModeratorRole>,
30    pub created: Option<String>,
31    pub assets: Assets,
32    pub links: Vec<Link>,
33}
34
35#[derive(Debug, Clone, PartialEq, Deserialize)]
36#[serde(rename_all = "kebab-case")]
37pub struct Ruleset {
38    pub show_milliseconds: bool,
39    pub require_verification: bool,
40    pub require_video: bool,
41    pub run_times: Vec<TimingMethod>,
42    pub default_time: TimingMethod,
43    pub emulators_allowed: bool,
44}