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