mlb_api/endpoints/sports/players/
mod.rs

1use crate::endpoints::StatsAPIUrl;
2use crate::endpoints::sports::SportId;
3use crate::gen_params;
4use std::fmt::{Display, Formatter};
5use crate::endpoints::people::PeopleResponse;
6
7#[derive(Default)]
8pub struct SportsPlayersEndpointUrl {
9	pub id: SportId,
10	pub season: Option<u16>,
11}
12
13impl Display for SportsPlayersEndpointUrl {
14	fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
15		write!(f, "http://statsapi.mlb.com/api/v1/sports/{}/players{}", self.id, gen_params! { "sportId": self.id, "season"?: self.season })
16	}
17}
18
19impl StatsAPIUrl for SportsPlayersEndpointUrl {
20	type Response = PeopleResponse;
21}
22
23#[cfg(test)]
24mod tests {
25	use super::*;
26	use crate::endpoints::StatsAPIUrl;
27	use crate::endpoints::sports::SportId;
28	use chrono::{Datelike, Local};
29
30	#[tokio::test]
31	#[cfg_attr(not(feature = "_heavy_tests"), ignore)]
32	async fn parse_all_players_all_seasons_mlb() {
33		for season in 1876..=Local::now().year() as _ {
34			let _response = SportsPlayersEndpointUrl { id: SportId::default(), season: Some(season) }.get().await.unwrap();
35		}
36	}
37
38	#[tokio::test]
39	async fn parse_all_players_mlb() {
40		let _response = SportsPlayersEndpointUrl { id: SportId::default(), season: None }.get().await.unwrap();
41	}
42}