Skip to main content

mlb_api/requests/person/
players.rs

1use 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}