ggapi/structs/
phase.rs

1
2use serde::{
3    Deserialize,
4    Serialize,
5};
6
7use crate::{
8    enums::*,
9    event::*,
10    phase_group::*,
11    set::*,
12};
13
14/// Equivalent for start.gg Phase.
15///
16/// Each element in the structure is optional, allowing a user to only query values they want.
17/// Given each is an option and not a requirement, a method is included for each element with the same name.
18/// These methods will unwrap and return the proper value without any unwrapping or references needed.
19/// Certain methods (see phase_groups()) will return a vector of the data type instead of a connection to a vector, done to simplify the API and make the start.gg api easier to work with.
20#[derive(Clone, Default, Serialize, Deserialize)]
21pub struct GGPhase {
22    
23    #[serde(rename(serialize = "bracketType",   deserialize = "bracketType"))]
24    pub bracket_type:               Option<i64>,
25    pub event:                      Option<Box<GGEvent>>,
26
27    #[serde(rename(serialize = "groupCount",    deserialize = "groupCount"))]
28    pub group_count:                Option<i64>,
29    pub id:                         Option<GGID>,
30
31    #[serde(rename(serialize = "isExhibition",  deserialize = "isExhibition"))]
32    pub is_exhibition:              Option<bool>,
33    pub name:                       Option<String>,
34
35    #[serde(rename(serialize = "numSeeds",      deserialize = "numSeeds"))]
36    pub num_seeds:                  Option<i64>,
37
38    #[serde(rename(serialize = "phaseGroups",   deserialize = "phaseGroups"))]
39    pub phase_groups:               Option<GGPhaseGroupConnection>,
40
41    #[serde(rename(serialize = "phaseOrder",    deserialize = "phaseOrder"))]
42    pub phase_order:                Option<i64>,
43    // pub seeds:                      Option<GGSeeds>,
44    pub sets:                       Option<GGSetConnection>,
45    pub state:                      Option<i64>,
46    // pub waves:                      Option<GGWave>,
47
48}
49
50impl GGPhase {
51
52    /// Returns the bracket type of the phase.
53    ///
54    /// Returns zero if not set or wasn't queried.
55    pub fn bracket_type(&self) -> i64 {
56        let mut result: i64 = 0;
57        if self.bracket_type.is_some() {
58            result = self.bracket_type.unwrap().clone();
59        }
60        return result;
61    }
62
63    /// Returns the event the phase is in.
64    ///
65    /// Returns an empty event if not set or wasn't queried.
66    pub fn event(&self) -> GGEvent {
67        let mut result: GGEvent = Default::default();
68        if self.event.is_some() {
69            result = *self.event.as_ref().unwrap().clone();
70        }
71        return result;
72    }
73
74    /// Returns the group count of the phase.
75    ///
76    /// Returns zero if not set or wasn't queried.
77    pub fn group_count(&self) -> i64 {
78        let mut result: i64 = 0;
79        if self.group_count.is_some() {
80            result = self.group_count.unwrap().clone();
81        }
82        return result;
83    }
84
85    /// Returns the id of the phase.
86    ///
87    /// Returns zero if not set or wasn't queried.
88    pub fn id(&self) -> GGID {
89        let mut result: GGID = GGID::Int(0);
90        if self.id.is_some() {
91            match self.id.clone().unwrap() {
92                GGID::Int(_) => result = self.id.as_ref().unwrap().clone(),
93                GGID::String(_) => result = self.id.as_ref().unwrap().clone(),
94            };
95        }
96        return result;
97    }
98
99    /// Returns if the phase is an exhibition.
100    ///
101    /// Returns false if not set or wasn't queried.
102    pub fn is_exhibition(&self) -> bool {
103        let mut result: bool = false;
104        if self.is_exhibition.is_some() {
105            result = self.is_exhibition.unwrap().clone();
106        }
107        return result;
108    }
109
110    /// Returns the name of the phase.
111    ///
112    /// Returns an empty string if not set or wasn't queried.
113    pub fn name(&self) -> String {
114        let mut result: String = "".to_string();
115        if self.name.is_some() {
116            result = self.name.clone().unwrap().clone();
117        }
118        return result;
119    }
120
121    /// Returns the number of seeds in the phase.
122    ///
123    /// Returns zero if not set or wasn't queried.
124    pub fn num_seeds(&self) -> i64 {
125        let mut result: i64 = 0;
126        if self.num_seeds.is_some() {
127            result = self.num_seeds.unwrap().clone();
128        }
129        return result;
130    }
131
132    /// Returns the phase groups in the phase.
133    ///
134    /// Returns an empty vector if not set or wasn't queried.
135    pub fn phase_groups(&self) -> Vec<GGPhaseGroup> {
136        let mut result: Vec<GGPhaseGroup> = Vec::new();
137        if self.phase_groups.is_some() {
138            for phase_group in &self.phase_groups.as_ref().unwrap().nodes {
139                result.push(phase_group.clone());
140            }
141        }
142        return result;
143    }
144
145    /// Returns the phase order of the phase.
146    ///
147    /// Returns zero if not set or wasn't queried.
148    pub fn phase_order(&self) -> i64 {
149        let mut result: i64 = 0;
150        if self.phase_order.is_some() {
151            result = self.phase_order.unwrap().clone();
152        }
153        return result;
154    }
155
156    /// Returns the sets in the phase.
157    ///
158    /// Returns an empty vector if not set or wasn't queried.
159    pub fn sets(&self) -> Vec<GGSet> {
160        let mut result: Vec<GGSet> = Vec::new();
161        if self.sets.is_some() {
162            for set in &self.sets.as_ref().unwrap().nodes {
163                result.push(set.clone());
164            }
165        }
166        return result;
167    }
168
169    /// Returns the state of the phase.
170    ///
171    /// Returns zero if not set or wasn't queried.
172    pub fn state(&self) -> i64 {
173        let mut result: i64 = 0;
174        if self.state.is_some() {
175            result = self.state.unwrap().clone();
176        }
177        return result;
178    }
179
180}