Skip to main content

mlb_api/requests/schedule/postseason/
mod.rs

1pub mod series;
2
3use crate::schedule::ScheduleResponse;
4use crate::season::SeasonId;
5use crate::team::TeamId;
6use bon::Builder;
7use itertools::Itertools;
8use std::fmt::{Display, Formatter};
9use crate::game_types::GameType;
10use crate::request::RequestURL;
11use crate::sport::SportId;
12
13#[derive(Builder)]
14#[builder(derive(Into))]
15pub struct SchedulePostseasonRequest {
16    #[builder(into)]
17    season: SeasonId,
18    #[builder(into)]
19    #[builder(default)]
20    sport_id: SportId,
21    #[builder(into)]
22    team_id: Option<TeamId>,
23    game_types: Option<Vec<GameType>>,
24    series_number: Option<u32>,
25}
26
27impl<S: schedule_postseason_request_builder::State + schedule_postseason_request_builder::IsComplete> crate::request::RequestURLBuilderExt for SchedulePostseasonRequestBuilder<S> {
28    type Built = SchedulePostseasonRequest;
29}
30
31impl Display for SchedulePostseasonRequest {
32    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
33        write!(f, "http://statsapi.mlb.com/api/v1/schedule/games/tied{params}", params = gen_params! {
34            "season": self.season,
35            "sportId": self.sport_id,
36            "teamId"?: self.team_id,
37            "gameTypes"?: self.game_types.as_ref().map(|x| x.iter().map(|g| format!("{g:?}")).join(",")),
38            "seriesNumber"?: self.series_number,
39        })
40    }
41}
42
43impl RequestURL for SchedulePostseasonRequest {
44    type Response = ScheduleResponse;
45}
46
47#[cfg(test)]
48mod tests {
49    use crate::request::RequestURLBuilderExt;
50    use crate::schedule::postseason::SchedulePostseasonRequest;
51	use crate::TEST_YEAR;
52
53	#[tokio::test]
54    async fn test_one_season() {
55        let _ = SchedulePostseasonRequest::builder().season(TEST_YEAR).build_and_get().await.unwrap();
56    }
57
58    #[tokio::test]
59    #[cfg_attr(not(feature = "_heavy_tests"), ignore)]
60    async fn test_all_seasons() {
61        for season in 1876..=TEST_YEAR {
62            let _ = SchedulePostseasonRequest::builder().season(season).build_and_get().await.unwrap();
63        }
64    }
65}
66