Skip to main content

mlb_api/requests/team/
affiliates.rs

1//! Returns a [`Vec`] of [`Team`](super::Team)s representing the minor league affiliates of a team.
2
3use 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/// Returns a [`TeamsResponse`].
11#[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}