mlb_api/requests/person/
players.rs1use crate::person::people::PeopleResponse;
2use crate::season::SeasonId;
3use crate::request::RequestURL;
4use bon::Builder;
5use std::fmt::{Display, Formatter};
6use crate::sport::SportId;
7
8#[derive(Builder)]
9#[builder(derive(Into))]
10pub struct PlayersRequest {
11 #[builder(into)]
12 #[builder(default)]
13 sport_id: SportId,
14 #[builder(into)]
15 season: Option<SeasonId>,
16}
17
18impl<S: players_request_builder::State + players_request_builder::IsComplete> crate::request::RequestURLBuilderExt for PlayersRequestBuilder<S> {
19 type Built = PlayersRequest;
20}
21
22impl Display for PlayersRequest {
23 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
24 write!(f, "http://statsapi.mlb.com/api/v1/sports/{}/players{}", self.sport_id, gen_params! { "sportId": self.sport_id, "season"?: self.season })
25 }
26}
27
28impl RequestURL for PlayersRequest {
29 type Response = PeopleResponse<()>;
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35 use crate::TEST_YEAR;
36 use crate::request::RequestURLBuilderExt;
37
38 #[tokio::test]
39 #[cfg_attr(not(feature = "_heavy_tests"), ignore)]
40 async fn parse_all_players_all_seasons_mlb() {
41 for season in 1876..=TEST_YEAR {
42 let _response = PlayersRequest::builder().sport_id(SportId::MLB).season(season).build_and_get().await.unwrap();
43 }
44 }
45
46 #[tokio::test]
47 async fn parse_all_players_mlb() {
48 let _response = PlayersRequest::builder().sport_id(SportId::MLB).build_and_get().await.unwrap();
49 }
50}