Skip to main content

mlbt_api/
schedule.rs

1use crate::stats::DisplayName;
2use serde::{Deserialize, Serialize};
3
4#[derive(Default, Debug, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct ScheduleResponse {
7    pub copyright: Option<String>,
8    pub total_items: Option<u8>,
9    pub total_events: Option<u8>,
10    pub total_games: u8,
11    pub total_games_in_progress: Option<u8>,
12    pub dates: Vec<Dates>, // these are the actual games
13}
14
15#[derive(Default, Debug, Serialize, Deserialize)]
16pub struct LeagueRecord {
17    pub wins: u8,
18    pub losses: u8,
19    pub pct: String,
20}
21
22#[derive(Default, Debug, Serialize, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct IdNameLink {
25    pub id: u16,
26    pub name: String,
27    pub link: String,
28    /// Present when the team is a minor-league affiliate, points to the MLB parent org.
29    pub parent_org_id: Option<u16>,
30}
31
32#[derive(Default, Debug, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct Dates {
35    pub date: Option<String>,
36    pub total_items: Option<u8>,
37    pub total_events: Option<u8>,
38    pub total_games: Option<u8>,
39    pub total_games_in_progress: Option<u8>,
40    pub games: Option<Vec<Game>>,
41    pub events: Option<Vec<Option<serde_json::Value>>>,
42}
43
44#[derive(Default, Debug, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct ScheduleLinescore {
47    pub current_inning: Option<i64>,
48    pub current_inning_ordinal: Option<String>,
49    pub inning_state: Option<String>,
50    pub inning_half: Option<String>,
51    pub is_top_inning: Option<bool>,
52}
53
54#[derive(Default, Debug, Serialize, Deserialize)]
55#[serde(rename_all = "camelCase")]
56pub struct Game {
57    pub game_pk: u64,
58    pub link: String,
59    // pub game_type: Option<GameType>,
60    pub season: String,
61    pub game_date: String,
62    pub official_date: String,
63    pub status: Status,
64    pub teams: Teams,
65    /// Only present if `hydrate=linescore` is used.
66    pub linescore: Option<ScheduleLinescore>,
67    pub venue: Option<IdNameLink>,
68    pub content: Option<Content>,
69    pub is_tie: Option<bool>,
70    pub game_number: Option<u64>,
71    // pub public_facing: Option<bool>,
72    // pub double_header: Option<DoubleHeader>,
73    // pub gameday_type: Option<GamedayType>,
74    // pub tiebreaker: Option<DoubleHeader>,
75    pub calendar_event_id: Option<String>,
76    // pub season_display: Option<String>,
77    // pub day_night: Option<DayNight>,
78    // pub scheduled_innings: Option<i64>,
79    // pub reverse_home_away_status: Option<bool>,
80    // pub inning_break_length: Option<i64>,
81    // pub games_in_series: Option<i64>,
82    // pub series_game_number: Option<i64>,
83    // pub series_description: Option<SeriesDescription>,
84    // pub record_source: Option<RecordSource>,
85    // pub if_necessary: Option<DoubleHeader>,
86    // pub if_necessary_description: Option<IfNecessaryDescription>,
87    // pub rescheduled_from: Option<String>,
88    // pub description: Option<String>,
89    // pub resume_date: Option<String>,
90    // pub reschedule_date: Option<String>,
91}
92
93#[derive(Default, Debug, Serialize, Deserialize)]
94pub struct Content {
95    pub link: Option<String>,
96}
97
98#[derive(Default, Debug, Serialize, Deserialize)]
99#[serde(rename_all = "camelCase")]
100pub struct Status {
101    pub abstract_game_state: Option<AbstractGameState>,
102    pub coded_game_state: Option<String>,
103    pub detailed_state: Option<String>,
104    pub status_code: Option<String>,
105    #[serde(rename = "startTimeTBD")]
106    pub start_time_tbd: Option<bool>,
107    pub abstract_game_code: Option<AbstractGameCode>,
108    pub reason: Option<String>,
109}
110
111#[derive(Default, Debug, Serialize, Deserialize)]
112pub struct Teams {
113    pub away: TeamInfo,
114    pub home: TeamInfo,
115}
116
117#[derive(Default, Debug, Serialize, Deserialize)]
118#[serde(rename_all = "camelCase")]
119pub struct TeamInfo {
120    pub league_record: Option<LeagueRecord>,
121    pub score: Option<u8>,
122    pub team: IdNameLink,
123    pub is_winner: Option<bool>,
124    pub split_squad: Option<bool>,
125    pub series_number: Option<u8>,
126    pub probable_pitcher: Option<ProbablePitcher>,
127}
128
129#[derive(Serialize, Deserialize)]
130#[serde(rename_all = "camelCase")]
131pub enum DayNight {
132    Day,
133    Night,
134}
135
136#[derive(Serialize, Deserialize)]
137pub enum DoubleHeader {
138    N,
139    Y,
140}
141
142#[derive(Debug, Serialize, Deserialize)]
143pub enum AbstractGameCode {
144    // pre game
145    P,
146    // live
147    L,
148    // final
149    F,
150}
151
152#[derive(Debug, Serialize, Deserialize)]
153pub enum AbstractGameState {
154    Final,
155    Live,
156    Preview,
157}
158
159/// Only present if `hydrate=probablePitcher` is used.
160#[derive(Default, Debug, Serialize, Deserialize)]
161#[serde(rename_all = "camelCase")]
162pub struct ProbablePitcher {
163    pub full_name: String,
164    #[serde(default)]
165    pub stats: Vec<StatEntry>,
166}
167
168/// Only present if `hydrate=stats` is used.
169#[derive(Default, Debug, Serialize, Deserialize)]
170pub struct StatEntry {
171    #[serde(rename = "type")]
172    pub stat_type: Option<DisplayName>,
173    pub group: Option<DisplayName>,
174    pub stats: Option<PitcherStats>,
175}
176
177#[derive(Default, Debug, Serialize, Deserialize)]
178#[serde(rename_all = "camelCase")]
179pub struct PitcherStats {
180    pub summary: Option<String>,
181    pub strike_outs: Option<u16>,
182    pub base_on_balls: Option<u16>,
183    pub era: Option<String>,
184    pub innings_pitched: Option<String>,
185    pub wins: Option<u8>,
186    pub losses: Option<u8>,
187}