speedrun_api/types/
games.rs1use 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}