speedrun_api/types/
variables.rs1use std::collections::HashMap;
2
3use serde::Deserialize;
4
5use crate::api::{
6 categories::CategoryId,
7 variables::{ValueId, VariableId},
8};
9
10use super::Link;
11
12#[derive(Debug, Clone, PartialEq, Deserialize)]
13#[serde(rename_all = "kebab-case")]
14pub struct Variable<'a> {
15 pub id: VariableId<'a>,
16 pub name: String,
17 pub category: Option<CategoryId<'a>>,
18 pub scope: Scope,
19 pub mandatory: bool,
20 pub user_defined: bool,
21 pub obsoletes: bool,
22 pub values: Values<'a>,
23 pub is_subcategory: bool,
24 pub links: Vec<Link>,
25}
26
27#[derive(Debug, Clone, PartialEq, Deserialize)]
28#[serde(rename_all = "kebab-case")]
29#[serde(tag = "type")]
30pub enum Scope {
31 Global,
32 FullGame,
33 AllLevels,
34 SingleLevel { level: String },
35}
36
37#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
38#[serde(rename_all = "kebab-case")]
39pub struct Values<'a> {
40 pub values: HashMap<ValueId<'a>, Value>,
41 pub default: Option<ValueId<'a>>,
42}
43
44#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
45#[serde(rename_all = "kebab-case")]
46pub struct Value {
47 pub label: String,
48 pub rules: Option<String>,
49 pub flags: Option<Flags>,
50}
51
52#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
53#[serde(rename_all = "kebab-case")]
54pub struct Flags {
55 pub miscellaneous: Option<bool>,
56}