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>, }
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 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 season: String,
61 pub game_date: String,
62 pub official_date: String,
63 pub status: Status,
64 pub teams: Teams,
65 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 calendar_event_id: Option<String>,
76 }
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 P,
146 L,
148 F,
150}
151
152#[derive(Debug, Serialize, Deserialize)]
153pub enum AbstractGameState {
154 Final,
155 Live,
156 Preview,
157}
158
159#[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#[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}