mlb_api/requests/team/
affiliates.rs1use crate::season::SeasonId;
4use crate::team::TeamId;
5use crate::team::TeamsResponse;
6use crate::request::RequestURL;
7use bon::Builder;
8use std::fmt::{Display, Formatter};
9
10#[derive(Builder)]
12#[builder(derive(Into))]
13pub struct TeamAffiliatesRequest {
14 #[builder(into)]
15 team_id: TeamId,
16 #[builder(into)]
17 season: Option<SeasonId>,
18}
19
20impl<S: team_affiliates_request_builder::State + team_affiliates_request_builder::IsComplete> crate::request::RequestURLBuilderExt for TeamAffiliatesRequestBuilder<S> {
21 type Built = TeamAffiliatesRequest;
22}
23
24impl Display for TeamAffiliatesRequest {
25 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
26 write!(f, "http://statsapi.mlb.com/api/v1/teams/{}/affiliates{params}", self.team_id, params = gen_params! { "season"?: self.season })
27 }
28}
29
30impl RequestURL for TeamAffiliatesRequest {
31 type Response = TeamsResponse<()>;
32}
33
34#[cfg(test)]
35mod tests {
36 use crate::request::{Error as RequestError, RequestURLBuilderExt};
37 use crate::team::affiliates::TeamAffiliatesRequest;
38 use crate::team::TeamsRequest;
39 use crate::TEST_YEAR;
40
41 #[tokio::test]
42 async fn all_mlb_teams() {
43 for team in TeamsRequest::mlb_teams().build_and_get().await.unwrap().teams {
44 let _affiliates = TeamAffiliatesRequest::builder().team_id(team.id).build_and_get().await.unwrap();
45 }
46 }
47
48 #[tokio::test]
49 #[cfg_attr(not(feature = "_heavy_tests"), ignore)]
50 async fn all_mlb_teams_all_seasons() {
51 for season in 1876..=TEST_YEAR {
52 for team in TeamsRequest::mlb_teams().build_and_get().await.unwrap().teams {
53 let affiliates_result = TeamAffiliatesRequest::builder().team_id(team.id).season(season).build_and_get().await;
54 match affiliates_result {
55 Ok(_) | Err(RequestError::MLB(_)) => {},
56 Err(e) => panic!("{e}"),
57 }
58 }
59 }
60 }
61}