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