mlb_api/endpoints/sports/
mod.rs

1mod types;
2pub use types::*;
3pub mod players;
4
5use crate::endpoints::Url;
6use crate::gen_params;
7use std::fmt::{Display, Formatter};
8
9pub struct SportsEndpointUrl {
10    pub id: Option<SportId>,
11}
12
13impl Display for SportsEndpointUrl {
14    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
15        write!(
16            f,
17            "https://statsapi.mlb.com/api/v1/sports{params}",
18            params = gen_params! { "sportId"?: self.id }
19        )
20    }
21}
22
23impl Url<SportsResponse> for SportsEndpointUrl {}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28    use crate::endpoints::Url;
29    use std::borrow::Cow;
30
31    #[tokio::test]
32    async fn check_updated() {
33        let target = SportsResponse {
34            copyright: Default::default(),
35            sports: vec![
36                HydratedSport {
37                    inner: UnhydratedSport {
38                        id: SportId::MLB,
39                        name: Cow::Borrowed("Major League Baseball"),
40                    },
41                    code: Cow::Borrowed("mlb"),
42                    abbreviation: Cow::Borrowed("MLB"),
43                    sort_order: 11,
44                    active: true,
45                },
46                HydratedSport {
47                    inner: UnhydratedSport {
48                        id: SportId::AAA,
49                        name: Cow::Borrowed("Triple-A"),
50                    },
51                    code: Cow::Borrowed("aaa"),
52                    abbreviation: Cow::Borrowed("AAA"),
53                    sort_order: 101,
54                    active: true,
55                },
56                HydratedSport {
57                    inner: UnhydratedSport {
58                        id: SportId::AA,
59                        name: Cow::Borrowed("Double-A"),
60                    },
61                    code: Cow::Borrowed("aax"),
62                    abbreviation: Cow::Borrowed("AA"),
63                    sort_order: 201,
64                    active: true,
65                },
66                HydratedSport {
67                    inner: UnhydratedSport {
68                        id: SportId::HIGH_A,
69                        name: Cow::Borrowed("High-A"),
70                    },
71                    code: Cow::Borrowed("afa"),
72                    abbreviation: Cow::Borrowed("A+"),
73                    sort_order: 301,
74                    active: true,
75                },
76                HydratedSport {
77                    inner: UnhydratedSport {
78                        id: SportId::A,
79                        name: Cow::Borrowed("Single-A"),
80                    },
81                    code: Cow::Borrowed("afx"),
82                    abbreviation: Cow::Borrowed("A"),
83                    sort_order: 401,
84                    active: true,
85                },
86                HydratedSport {
87                    inner: UnhydratedSport {
88                        id: SportId::ROOKIE,
89                        name: Cow::Borrowed("Rookie"),
90                    },
91                    code: Cow::Borrowed("rok"),
92                    abbreviation: Cow::Borrowed("ROK"),
93                    sort_order: 701,
94                    active: true,
95                },
96                HydratedSport {
97                    inner: UnhydratedSport {
98                        id: SportId::WINTER,
99                        name: Cow::Borrowed("Winter Leagues"),
100                    },
101                    code: Cow::Borrowed("win"),
102                    abbreviation: Cow::Borrowed("WIN"),
103                    sort_order: 1301,
104                    active: true,
105                },
106                HydratedSport {
107                    inner: UnhydratedSport {
108                        id: SportId::MILB,
109                        name: Cow::Borrowed("Minor League Baseball"),
110                    },
111                    code: Cow::Borrowed("min"),
112                    abbreviation: Cow::Borrowed("Minors"),
113                    sort_order: 1402,
114                    active: true,
115                },
116                HydratedSport {
117                    inner: UnhydratedSport {
118                        id: SportId::INDIE,
119                        name: Cow::Borrowed("Independent Leagues"),
120                    },
121                    code: Cow::Borrowed("ind"),
122                    abbreviation: Cow::Borrowed("IND"),
123                    sort_order: 2101,
124                    active: true,
125                },
126                HydratedSport {
127                    inner: UnhydratedSport {
128                        id: SportId::NLB,
129                        name: Cow::Borrowed("Negro League Baseball"),
130                    },
131                    code: Cow::Borrowed("nlb"),
132                    abbreviation: Cow::Borrowed("NLB"),
133                    sort_order: 2401,
134                    active: true, // what??
135                },
136                HydratedSport {
137                    inner: UnhydratedSport {
138                        id: SportId::KBO,
139                        name: Cow::Borrowed("Korean Baseball Organization"),
140                    },
141                    code: Cow::Borrowed("kor"),
142                    abbreviation: Cow::Borrowed("KOR"),
143                    sort_order: 2601,
144                    active: true,
145                },
146                HydratedSport {
147                    inner: UnhydratedSport {
148                        id: SportId::NPB,
149                        name: Cow::Borrowed("Nippon Professional Baseball"),
150                    },
151                    code: Cow::Borrowed("jml"),
152                    abbreviation: Cow::Borrowed("NPB"),
153                    sort_order: 2701,
154                    active: true,
155                },
156                HydratedSport {
157                    inner: UnhydratedSport {
158                        id: SportId::INTERNATIONAL,
159                        name: Cow::Borrowed("International Baseball"),
160                    },
161                    code: Cow::Borrowed("int"),
162                    abbreviation: Cow::Borrowed("INT"),
163                    sort_order: 3501,
164                    active: true,
165                },
166                HydratedSport {
167                    inner: UnhydratedSport {
168                        id: SportId::INTERNATIONAL_18U,
169                        name: Cow::Borrowed("International Baseball (18U)"),
170                    },
171                    code: Cow::Borrowed("nae"),
172                    abbreviation: Cow::Borrowed("18U"),
173                    sort_order: 3503,
174                    active: true,
175                },
176                HydratedSport {
177                    inner: UnhydratedSport {
178                        id: SportId::INTERNATIONAL_16U,
179                        name: Cow::Borrowed("International Baseball (16 and under)"),
180                    },
181                    code: Cow::Borrowed("nas"),
182                    abbreviation: Cow::Borrowed("16U"),
183                    sort_order: 3505,
184                    active: true,
185                },
186                HydratedSport {
187                    inner: UnhydratedSport {
188                        id: SportId::INTERNATIONAL_AMATEUR,
189                        name: Cow::Borrowed("International Baseball (amateur)"),
190                    },
191                    code: Cow::Borrowed("ame"),
192                    abbreviation: Cow::Borrowed("AME"),
193                    sort_order: 3509,
194                    active: true,
195                },
196                HydratedSport {
197                    inner: UnhydratedSport {
198                        id: SportId::COLLEGE,
199                        name: Cow::Borrowed("College Baseball"),
200                    },
201                    code: Cow::Borrowed("bbc"),
202                    abbreviation: Cow::Borrowed("College"),
203                    sort_order: 5101,
204                    active: true,
205                },
206                HydratedSport {
207                    inner: UnhydratedSport {
208                        id: SportId::HIGH_SCHOOL,
209                        name: Cow::Borrowed("High School Baseball"),
210                    },
211                    code: Cow::Borrowed("hsb"),
212                    abbreviation: Cow::Borrowed("H.S."),
213                    sort_order: 6201,
214                    active: true,
215                },
216                HydratedSport {
217                    inner: UnhydratedSport {
218                        id: SportId::WPF,
219                        name: Cow::Borrowed("Women's Professional Softball"),
220                    },
221                    code: Cow::Borrowed("wps"),
222                    abbreviation: Cow::Borrowed("WPS"),
223                    sort_order: 7001,
224                    active: true,
225                },
226            ],
227        };
228        let result = SportsEndpointUrl { id: None }.get().await.unwrap();
229        assert_eq!(result, target);
230    }
231}