mlb_api/endpoints/sports/
mod.rs1mod 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, },
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}