speedrun_api/types/
variables.rs

1use 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}