mlb_api/endpoints/sports/players/
mod.rs1use 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}