Skip to main content

mlb_api/requests/team/
alumni.rs

1use crate::person::people::PeopleResponse;
2use crate::season::SeasonId;
3use crate::team::TeamId;
4use crate::request::RequestURL;
5use bon::Builder;
6use std::fmt::{Display, Formatter};
7
8#[derive(Builder)]
9#[builder(derive(Into))]
10pub struct AlumniRequest {
11	#[builder(into)]
12	team_id: TeamId,
13	#[builder(into)]
14	season: Option<SeasonId>,
15}
16
17impl<S: alumni_request_builder::State + alumni_request_builder::IsComplete> crate::request::RequestURLBuilderExt for AlumniRequestBuilder<S> {
18	type Built = AlumniRequest;
19}
20
21impl Display for AlumniRequest {
22	fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
23		write!(f, "http://statsapi.mlb.com/api/v1/teams/{}/alumni{}", self.team_id, gen_params! { "season"?: self.season })
24	}
25}
26
27impl RequestURL for AlumniRequest {
28	type Response = PeopleResponse<()>;
29}
30
31#[cfg(test)]
32mod tests {
33	use crate::request::RequestURLBuilderExt;
34	use crate::team::alumni::AlumniRequest;
35	use crate::team::teams::TeamsRequest;
36	use crate::TEST_YEAR;
37
38	#[tokio::test]
39	#[cfg_attr(not(feature = "_heavy_tests"), ignore)]
40	async fn test_heavy() {
41		let season = TEST_YEAR;
42		let teams = TeamsRequest::mlb_teams().season(season).build_and_get().await.unwrap();
43		for team in teams.teams {
44			let _ = AlumniRequest::builder().team_id(team.id).season(season).build_and_get().await.unwrap();
45		}
46	}
47}