Skip to main content

mlb_api/requests/team/
alumni.rs

1//! Returns a list of alumni associated with a team; [`PeopleResponse`].
2
3use crate::person::PeopleResponse;
4use crate::season::SeasonId;
5use crate::team::TeamId;
6use crate::request::RequestURL;
7use bon::Builder;
8use std::fmt::{Display, Formatter};
9use crate::hydrations::Hydrations;
10use crate::person::PersonHydrations;
11
12#[derive(Builder)]
13#[builder(derive(Into))]
14pub struct AlumniRequest<H: PersonHydrations = ()> {
15	#[builder(into)]
16	team_id: TeamId,
17	#[builder(into)]
18	season: Option<SeasonId>,
19	#[builder(into)]
20	hydrations: H::RequestData,
21}
22
23impl AlumniRequest {
24	pub fn for_team(team_id: impl Into<TeamId>) -> AlumniRequestBuilder<(), alumni_request_builder::SetHydrations<alumni_request_builder::SetTeamId>> {
25		Self::builder()
26			.team_id(team_id.into())
27			.hydrations(<() as Hydrations>::RequestData::default())
28	}
29}
30
31impl<S: alumni_request_builder::State + alumni_request_builder::IsComplete, H: PersonHydrations> crate::request::RequestURLBuilderExt for AlumniRequestBuilder<H, S> {
32	type Built = AlumniRequest<H>;
33}
34
35impl<H: PersonHydrations> Display for AlumniRequest<H> {
36	fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
37		let hydrations = Some(H::hydration_text(&self.hydrations)).filter(|s| !s.is_empty());
38		write!(f, "http://statsapi.mlb.com/api/v1/teams/{}/alumni{}", self.team_id, gen_params! { "season"?: self.season, "hydrate"?: hydrations })
39	}
40}
41
42impl<H: PersonHydrations> RequestURL for AlumniRequest<H> {
43	type Response = PeopleResponse<H>;
44}
45
46#[cfg(test)]
47mod tests {
48	use crate::request::RequestURLBuilderExt;
49	use crate::team::alumni::AlumniRequest;
50	use crate::team::TeamsRequest;
51	use crate::TEST_YEAR;
52
53	#[tokio::test]
54	#[cfg_attr(not(feature = "_heavy_tests"), ignore)]
55	async fn test_heavy() {
56		let season = TEST_YEAR;
57		let teams = TeamsRequest::mlb_teams().season(season).build_and_get().await.unwrap();
58		for team in teams.teams {
59			let _ = AlumniRequest::<()>::for_team(team.id).season(season).build_and_get().await.unwrap();
60		}
61	}
62}