mlb_api/requests/meta/
game_status.rs1use serde::Deserialize;
2
3id!(#[doc = "A [`String`] representing the [`GameStatus`]"] GameStatusId { detailedState: String });
4
5#[derive(Debug, Deserialize, PartialEq, Eq, Copy, Clone)]
7pub enum CodedGameState {
8 #[serde(rename = "S")]
10 Scheduled,
11
12 #[serde(rename = "P")]
14 PreGame,
15
16 #[serde(rename = "I")]
18 InProgress,
19
20 #[serde(rename = "M")]
22 ManagerChallenge,
23
24 #[serde(rename = "N")]
26 UmpireReview,
27
28 #[serde(rename = "D")]
30 Postponed,
31
32 #[serde(rename = "C")]
34 Cancelled,
35
36 #[serde(rename = "F", alias = "O")] Finished,
39
40 #[serde(rename = "T", alias = "U")] Suspended,
43
44 #[serde(rename = "Q", alias = "R")] Forfeit,
47
48 #[serde(rename = "W")]
50 Writing,
51
52 #[serde(rename = "X")]
54 Unknown,
55}
56
57#[derive(Debug, Deserialize, PartialEq, Eq, Copy, Clone)]
59pub enum AbstractGameCode {
60 #[serde(rename = "P")]
62 Preview,
63
64 #[serde(rename = "L")]
66 Live,
67
68 #[serde(rename = "F")]
70 Finished,
71
72 #[serde(rename = "O")]
74 Other,
75}
76
77impl AbstractGameCode {
78 #[must_use]
79 pub const fn has_begun(self) -> bool {
80 matches!(self, Self::Live | Self::Finished | Self::Other)
81 }
82
83 #[must_use]
84 pub const fn has_ended(self) -> bool {
85 matches!(self, Self::Finished | Self::Other)
86 }
87
88 #[must_use]
89 pub const fn is_preview(self) -> bool {
90 matches!(self, Self::Preview)
91 }
92
93 #[must_use]
94 pub const fn is_live(self) -> bool {
95 matches!(self, Self::Live)
96 }
97
98 #[must_use]
99 pub const fn is_finished(self) -> bool {
100 matches!(self, Self::Finished)
101 }
102
103 #[must_use]
104 pub const fn is_unknown(self) -> bool {
105 matches!(self, Self::Other)
106 }
107}
108
109#[derive(Debug, Deserialize, Clone)]
111#[serde(rename_all = "camelCase")]
112pub struct GameStatus {
113 pub abstract_game_state: String,
114 pub coded_game_state: CodedGameState,
115 pub status_code: String,
116 pub reason: Option<String>,
117 pub abstract_game_code: AbstractGameCode,
118 #[serde(flatten)]
119 pub id: GameStatusId,
120}
121
122id_only_eq_impl!(GameStatus, id);
123meta_kind_impl!("gameStatus" => GameStatus);
124tiered_request_entry_cache_impl!(GameStatus.id: GameStatusId);
125test_impl!(GameStatus);