Skip to main content

mlbt_api/
schedule.rs

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