ggapi/structs/
event.rs

1
2use chrono::{
3    DateTime,
4    TimeZone,
5    Utc
6};
7use serde::{
8    Deserialize,
9    Serialize,
10};
11
12use crate::{
13    entrant::*,
14    enums::*,
15    page_info::*,
16    phase::*,
17    phase_group::*,
18    standing::*,
19    tournament::*,
20};
21
22/// Equivalent for start.gg EventConnection.
23#[derive(Clone, Default, Serialize, Deserialize)]
24pub struct GGEventConnection {
25    pub nodes:      Vec<GGEvent>,
26    pub page_info:  Option<Box<GGPageInfo>>,
27}
28
29impl GGEventConnection {
30
31    /// Returns the page info of the connection.
32    ///
33    /// Returns empty page info if not set or wasn't queried.
34    pub fn page_info(&self) -> GGPageInfo {
35        let mut result: GGPageInfo = Default::default();
36        if self.page_info.is_some() {
37            result = *self.page_info.as_ref().unwrap().clone();
38        }
39        return result;
40    }
41
42}
43
44/// Equivalent for start.gg Event.
45///
46/// Each element in the structure is optional, allowing a user to only query values they want.
47/// Given each is an option and not a requirement, a method is included for each element with the same name.
48/// These methods will unwrap and return the proper value without any unwrapping or references needed.
49/// Certain methods (see entrants()) 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.
50#[derive(Clone, Default, Serialize, Deserialize)]
51pub struct GGEvent {
52    
53    #[serde(rename(serialize = "checkInBuffer",             deserialize = "checkInBuffer"))]
54    pub check_in_buffer:            Option<i64>,
55
56    #[serde(rename(serialize = "checkInDuration",           deserialize = "checkInDuration"))]
57    pub check_in_duration:          Option<i64>,
58
59    #[serde(rename(serialize = "checkInEnabled",            deserialize = "checkInEnabled"))]
60    pub check_in_enabled:           Option<bool>,
61    
62    #[serde(rename(serialize = "competitionTier",           deserialize = "competitionTier"))]
63    pub competition_tier:           Option<i64>,
64    
65    #[serde(rename(serialize = "createdAt",                 deserialize = "createdAt"))]
66    pub created_at:                 Option<i64>,
67
68    #[serde(rename(serialize = "deckSubmissionDeadline",    deserialize = "deckSubmissionDeadline"))]
69    pub deck_submission_deadline:   Option<i64>,
70    pub entrants:                   Option<GGEntrantConnection>,
71
72    #[serde(rename(serialize = "hasDecks",                  deserialize = "hasDecks"))]
73    pub has_decks:                  Option<bool>,
74
75    #[serde(rename(serialize = "hasTasks",                  deserialize = "hasTasks"))]
76    pub has_tasks:                  Option<bool>,
77    pub id:                         Option<GGID>,
78    // pub images:                     Option<Vec<GGImage>>,
79
80    #[serde(rename(serialize = "isOnline",                  deserialize = "isOnline"))]
81    pub is_online:                  Option<bool>,
82    // pub league:                     Option<GGLeague>,
83
84    #[serde(rename(serialize = "matchRulesMarkdown",        deserialize = "matchRulesMarkdown"))]
85    pub match_rules_markdown:       Option<String>,
86    pub name:                       Option<String>,
87
88    #[serde(rename(serialize = "numEntrants",               deserialize = "numEntrants"))]
89    pub num_entrants:               Option<i64>,
90    
91    #[serde(rename(serialize = "phaseGroups",               deserialize = "phaseGroups"))]
92    pub phase_groups:               Option<Vec<GGPhaseGroup>>,
93    pub phases:                     Option<Vec<GGPhase>>,
94    
95    // #[serde(rename(serialize = "prizingInfo",               deserialize = "prizingInfo"))]
96    // pub prizing_info: JSON,
97    // pub publishing: JSON,
98
99    #[serde(rename(serialize = "rulesMarkdown",             deserialize = "rulesMarkdown"))]
100    pub rules_markdown:             Option<String>,
101
102    #[serde(rename(serialize = "rulesetId",                 deserialize = "rulesetId"))]
103    pub ruleset_id:                 Option<i64>,
104    // pub sets:                       Option<GGSets>,
105    pub slug:                       Option<String>,
106    pub standings:                  Option<GGStandingConnection>,
107
108    #[serde(rename(serialize = "startAt",                   deserialize = "startAt"))]
109    pub start_at:                   Option<i64>,
110    pub state:                      Option<i64>,
111    // pub stations:                   Option<GGStations>,
112
113    #[serde(rename(serialize = "teamManagementDeadline",    deserialize = "teamManagementDeadline"))]
114    pub team_management_deadline:   Option<i64>,
115
116    #[serde(rename(serialize = "teamNameAllowed",           deserialize = "teamNameAllowed"))]
117    pub team_name_allowed:          Option<bool>,
118
119    // #[serde(rename(serialize = "teamRosterSize",            deserialize = "teamRosterSize"))]
120    // pub team_roster_size:           Option<GGTeamRosterSize>,
121    pub tournament:                 Option<Box<GGTournament>>,
122    pub r#type:                     Option<i64>,
123    
124    #[serde(rename(serialize = "updatedAt",                 deserialize = "updatedAt"))]
125    pub updated_at:                 Option<i64>,
126    
127    #[serde(rename(serialize = "useEventSeeds",             deserialize = "useEventSeeds"))]
128    pub use_event_seeds:            Option<bool>,
129
130    #[serde(rename(serialize = "userEntrant",               deserialize = "userEntrant"))]
131    pub user_entrant:               Option<Box<GGEntrant>>,
132    // pub videogame:                  Option<GGVideogame>,
133    // pub waves:                      Option<Vec<GGWave>>,
134
135}
136
137impl GGEvent {
138
139    /// Returns the check in buffer of the event.
140    ///
141    /// Returns zero if not set or wasn't queried.
142    pub fn check_in_buffer(&self) -> i64 {
143        let mut result: i64 = 0;
144        if self.check_in_buffer.is_some() {
145            result = self.check_in_buffer.unwrap().clone();
146        }
147        return result;
148    }
149    
150    /// Returns the check in duration of the event.
151    ///
152    /// Returns zero if not set or wasn't queried.
153    pub fn check_in_duration(&self) -> i64 {
154        let mut result: i64 = 0;
155        if self.check_in_duration.is_some() {
156            result = self.check_in_duration.unwrap().clone();
157        }
158        return result;
159    }
160
161    /// Returns if the event has check in enabled.
162    ///
163    /// Returns false if not set or wasn't queried.
164    pub fn check_in_enabled(&self) -> bool {
165        let mut result: bool = false;
166        if self.check_in_enabled.is_some() {
167            result = self.check_in_enabled.unwrap().clone();
168        }
169        return result;
170    }
171
172    /// Returns the competition tier of the event.
173    ///
174    /// Returns zero if not set or wasn't queried.
175    pub fn competition_tier(&self) -> i64 {
176        let mut result: i64 = 0;
177        if self.competition_tier.is_some() {
178            result = self.competition_tier.unwrap().clone();
179        }
180        return result;
181    }
182
183    /// Returns the time the event was created.
184    ///
185    /// Returns zero if not set or wasn't queried.
186    pub fn created_at(&self) -> DateTime<Utc> {
187        let mut result: i64 = 0;
188        if self.created_at.is_some() {
189            result = self.created_at.unwrap().clone();
190        }
191        return Utc.timestamp_opt(result, 0).unwrap();
192    }
193
194    /// Returns the deck submission deadline of the event.
195    ///
196    /// Returns zero if not set or wasn't queried.
197    pub fn deck_submission_deadline(&self) -> DateTime<Utc> {
198        let mut result: i64 = 0;
199        if self.deck_submission_deadline.is_some() {
200            result = self.deck_submission_deadline.unwrap().clone();
201        }
202        return Utc.timestamp_opt(result, 0).unwrap();
203    }
204
205    /// Returns the entrants in the event.
206    ///
207    /// Returns an empty vector if not set or wasn't queried.
208    pub fn entrants(&self) -> Vec<GGEntrant> {
209        let mut result: Vec<GGEntrant> = Vec::new();
210        if self.entrants.is_some() {
211            for entrant in &self.entrants.as_ref().unwrap().nodes {
212                result.push(entrant.clone());
213            }
214        }
215        return result;
216    }
217
218    /// Returns if the event has decks.
219    ///
220    /// Returns false if not set or wasn't queried.
221    pub fn has_decks(&self) -> bool {
222        let mut result: bool = false;
223        if self.has_decks.is_some() {
224            result = self.has_decks.unwrap().clone();
225        }
226        return result;
227    }
228
229    /// Returns if the event has tasks.
230    ///
231    /// Returns false if not set or wasn't queried.
232    pub fn has_tasks(&self) -> bool {
233        let mut result: bool = false;
234        if self.has_tasks.is_some() {
235            result = self.has_tasks.unwrap().clone();
236        }
237        return result;
238    }
239
240    /// Returns the id of the event.
241    ///
242    /// Returns zero if not set or wasn't queried.
243    pub fn id(&self) -> GGID {
244        let mut result: GGID = GGID::Int(0);
245        if self.id.is_some() {
246            match self.id.clone().unwrap() {
247                GGID::Int(_) => result = self.id.as_ref().unwrap().clone(),
248                GGID::String(_) => result = self.id.as_ref().unwrap().clone(),
249            };
250        }
251        return result;
252    }
253
254    /// Returns if the event is online.
255    ///
256    /// Returns false if not set or wasn't queried.
257    pub fn is_online(&self) -> bool {
258        let mut result: bool = false;
259        if self.is_online.is_some() {
260            result = self.is_online.unwrap().clone();
261        }
262        return result;
263    }
264
265    /// Returns the match rules of the event.
266    ///
267    /// Returns an empty string if not set or wasn't queried.
268    pub fn match_rules_markdown(&self) -> String {
269        let mut result: String = "".to_string();
270        if self.match_rules_markdown.is_some() {
271            result = self.match_rules_markdown.clone().unwrap().clone();
272        }
273        return result;
274    }
275
276    /// Returns the name of the event.
277    ///
278    /// Returns an empty string if not set or wasn't queried.
279    pub fn name(&self) -> String {
280        let mut result: String = "".to_string();
281        if self.name.is_some() {
282            result = self.name.clone().unwrap().clone();
283        }
284        return result;
285    }
286
287    /// Returns the number of entrants in the event.
288    ///
289    /// Returns zero if not set or wasn't queried.
290    pub fn num_entrants(&self) -> i64 {
291        let mut result: i64 = 0;
292        if self.num_entrants.is_some() {
293            result = self.num_entrants.unwrap().clone();
294        }
295        return result;
296    }
297
298    /// Returns the phase groups in the event.
299    ///
300    /// Returns an empty vector if not set or wasn't queried.
301    pub fn phase_groups(&self) -> Vec<GGPhaseGroup> {
302        let mut result: Vec<GGPhaseGroup> = Vec::new();
303        if self.phase_groups.is_some() {
304            for phase_group in self.phase_groups.as_ref().unwrap() {
305                result.push(phase_group.clone());
306            }
307        }
308        return result;
309    }
310
311    /// Returns the phases in the event.
312    ///
313    /// Returns an empty vector if not set or wasn't queried.
314    pub fn phases(&self) -> Vec<GGPhase> {
315        let mut result: Vec<GGPhase> = Vec::new();
316        if self.phases.is_some() {
317            for phase in self.phases.as_ref().unwrap() {
318                result.push(phase.clone());
319            }
320        }
321        return result;
322    }
323
324    /// Returns the rules of the event.
325    ///
326    /// Returns an empty string if not set or wasn't queried.
327    pub fn rules_markdown(&self) -> String {
328        let mut result: String = "".to_string();
329        if self.rules_markdown.is_some() {
330            result = self.rules_markdown.clone().unwrap().clone();
331        }
332        return result;
333    }
334
335    /// Returns the ruleset id of the event.
336    ///
337    /// Returns zero if not set or wasn't queried.
338    pub fn ruleset_id(&self) -> i64 {
339        let mut result: i64 = 0;
340        if self.ruleset_id.is_some() {
341            result = self.ruleset_id.unwrap().clone();
342        }
343        return result;
344    }
345
346    /// Returns the slug of the event.
347    ///
348    /// Returns an empty string if not set or wasn't queried.
349    pub fn slug(&self) -> String {
350        let mut result: String = "".to_string();
351        if self.slug.is_some() {
352            result = self.slug.clone().unwrap().clone();
353        }
354        return result;
355    }
356
357    /// Returns the standings of the event.
358    ///
359    /// Returns an empty vector if not set or wasn't queried.
360    pub fn standings(&self) -> Vec<GGStanding> {
361        let mut result: Vec<GGStanding> = Vec::new();
362        if self.standings.is_some() {
363            for standing in &self.standings.as_ref().unwrap().nodes {
364                result.push(standing.clone());
365            }
366        }
367        return result;
368    }
369
370    /// Returns the start time of the event.
371    ///
372    /// Returns zero if not set or wasn't queried.
373    pub fn start_at(&self) -> DateTime<Utc> {
374        let mut result: i64 = 0;
375        if self.start_at.is_some() {
376            result = self.start_at.unwrap().clone();
377        }
378        return Utc.timestamp_opt(result, 0).unwrap();
379    }
380
381    /// Returns the state of the event.
382    ///
383    /// Returns zero if not set or wasn't queried.
384    pub fn state(&self) -> i64 {
385        let mut result: i64 = 0;
386        if self.state.is_some() {
387            result = self.state.unwrap().clone();
388        }
389        return result;
390    }
391
392    /// Returns the team management deadline of the event.
393    ///
394    /// Returns zero if not set or wasn't queried.
395    pub fn team_management_deadline(&self) -> DateTime<Utc> {
396        let mut result: i64 = 0;
397        if self.team_management_deadline.is_some() {
398            result = self.team_management_deadline.unwrap().clone();
399        }
400        return Utc.timestamp_opt(result, 0).unwrap();
401    }
402
403    /// Returns if the event allows team names.
404    ///
405    /// Returns false if not set or wasn't queried.
406    pub fn team_name_allowed(&self) -> bool {
407        let mut result: bool = false;
408        if self.team_name_allowed.is_some() {
409            result = self.team_name_allowed.unwrap().clone();
410        }
411        return result;
412    }
413
414    /// Returns the tournament the event is in.
415    ///
416    /// Returns an empty tournament if not set or wasn't queried.
417    pub fn tournament(&self) -> GGTournament {
418        let mut result: GGTournament = Default::default();
419        if self.tournament.is_some() {
420            result = *self.tournament.as_ref().unwrap().clone();
421        }
422        return result;
423    }
424
425    /// Returns the type of the event.
426    ///
427    /// Returns zero if not set or wasn't queried.
428    pub fn r#type(&self) -> i64 {
429        let mut result: i64 = 0;
430        if self.r#type.is_some() {
431            result = self.r#type.unwrap().clone();
432        }
433        return result;
434    }
435
436    /// Returns the time the event was last updated.
437    ///
438    /// Returns zero if not set or wasn't queried.
439    pub fn updated_at(&self) -> DateTime<Utc> {
440        let mut result: i64 = 0;
441        if self.updated_at.is_some() {
442            result = self.updated_at.unwrap().clone();
443        }
444        return Utc.timestamp_opt(result, 0).unwrap();
445    }
446
447    /// Returns if the event uses event seeds.
448    ///
449    /// Returns false if not set or wasn't queried.
450    pub fn use_event_seeds(&self) -> bool {
451        let mut result: bool = false;
452        if self.use_event_seeds.is_some() {
453            result = self.use_event_seeds.unwrap().clone();
454        }
455        return result;
456    }
457
458    /// Returns an entrant for a specific user in the event.
459    ///
460    /// Returns an empty entrant if not set or wasn't queried.
461    pub fn user_entrant(&self) -> GGEntrant {
462        let mut result: GGEntrant = Default::default();
463        if self.user_entrant.is_some() {
464            result = *self.user_entrant.as_ref().unwrap().clone();
465        }
466        return result;
467    }
468
469}