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