1use serde::{Deserialize, Serialize};
2use serde_repr::{Deserialize_repr, Serialize_repr};
3
4use crate::icon_urls::LeagueIconUrls;
5
6use super::icon_urls;
7
8#[derive(Debug, Clone, Copy, Serialize_repr, Deserialize_repr, PartialEq, Eq, PartialOrd, Ord)]
9#[repr(i32)]
10pub enum LeagueKind {
11 Unranked = 29_000_000,
12 BronzeLeagueIII = 29_000_001,
13 BronzeLeagueII = 29_000_002,
14 BronzeLeagueI = 29_000_003,
15 SilverLeagueIII = 29_000_004,
16 SilverLeagueII = 29_000_005,
17 SilverLeagueI = 29_000_006,
18 GoldLeagueIII = 29_000_007,
19 GoldLeagueII = 29_000_008,
20 GoldLeagueI = 29_000_009,
21 CrystalLeagueIII = 29_000_010,
22 CrystalLeagueII = 29_000_011,
23 CrystalLeagueI = 29_000_012,
24 MasterLeagueIII = 29_000_013,
25 MasterLeagueII = 29_000_014,
26 MasterLeagueI = 29_000_015,
27 ChampionLeagueIII = 29_000_016,
28 ChampionLeagueII = 29_000_017,
29 ChampionLeagueI = 29_000_018,
30 TitanLeagueIII = 29_000_019,
31 TitanLeagueII = 29_000_020,
32 TitanLeagueI = 29_000_021,
33 LegendLeague = 29_000_022,
34}
35
36impl std::fmt::Display for LeagueKind {
37 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
38 std::fmt::Debug::fmt(self, f)
39 }
40}
41
42#[derive(Debug, Clone, Copy, Serialize_repr, Deserialize_repr, PartialEq, Eq, PartialOrd, Ord)]
43#[repr(i32)]
44pub enum WarLeagueKind {
45 Unranked = 48_000_000,
46 BronzeLeagueIII = 48_000_001,
47 BronzeLeagueII = 48_000_002,
48 BronzeLeagueI = 48_000_003,
49 SilverLeagueIII = 48_000_004,
50 SilverLeagueII = 48_000_005,
51 SilverLeagueI = 48_000_006,
52 GoldLeagueIII = 48_000_007,
53 GoldLeagueII = 48_000_008,
54 GoldLeagueI = 48_000_009,
55 CrystalLeagueIII = 48_000_010,
56 CrystalLeagueII = 48_000_011,
57 CrystalLeagueI = 48_000_012,
58 MasterLeagueIII = 48_000_013,
59 MasterLeagueII = 48_000_014,
60 MasterLeagueI = 48_000_015,
61 ChampionLeagueIII = 48_000_016,
62 ChampionLeagueII = 48_000_017,
63 ChampionLeagueI = 48_000_018,
64}
65
66impl std::fmt::Display for WarLeagueKind {
67 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
68 std::fmt::Debug::fmt(self, f)
69 }
70}
71
72#[derive(Debug, Serialize, Deserialize, Clone)]
73#[serde(rename_all = "camelCase")]
74pub struct League {
75 pub id: LeagueKind,
76 pub name: String,
77 pub icon_urls: icon_urls::LeagueIconUrls,
78}
79
80#[derive(Debug, Serialize, Deserialize, Clone)]
81#[serde(rename_all = "camelCase")]
82pub struct WarLeague {
83 pub id: WarLeagueKind,
84 pub name: String,
85}
86
87#[allow(non_snake_case)]
89impl League {
90 #[must_use]
91 pub fn Unranked() -> Self {
92 Self {
93 id: LeagueKind::Unranked,
94 name: "Unranked".to_string(),
95 icon_urls: LeagueIconUrls {
96 small: "https://api-assets.clashofclans.com/leagues/72/e--YMyIexEQQhE4imLoJcwhYn6Uy8KqlgyY3_kFV6t4.png".to_string(),
97 tiny: "https://api-assets.clashofclans.com/leagues/36/e--YMyIexEQQhE4imLoJcwhYn6Uy8KqlgyY3_kFV6t4.png".to_string(),
98 medium: None,
99 },
100 }
101 }
102
103 #[must_use]
104 pub fn BronzeLeagueIII() -> Self {
105 Self {
106 id: LeagueKind::BronzeLeagueIII,
107 name: "Bronze League III".to_string(),
108 icon_urls: LeagueIconUrls {
109 small: "https://api-assets.clashofclans.com/leagues/72/uUJDLEdAh7Lwf6YOHmXfNM586ZlEvMju54bTlt2u6EE.png".to_string(),
110 tiny: "https://api-assets.clashofclans.com/leagues/36/uUJDLEdAh7Lwf6YOHmXfNM586ZlEvMju54bTlt2u6EE.png".to_string(),
111 medium: Some("https://api-assets.clashofclans.com/leagues/288/uUJDLEdAh7Lwf6YOHmXfNM586ZlEvMju54bTlt2u6EE.png".to_string()),
112 },
113 }
114 }
115
116 #[must_use]
117 pub fn BronzeLeagueII() -> Self {
118 Self {
119 id: LeagueKind::BronzeLeagueII,
120 name: "Bronze League II".to_string(),
121 icon_urls: LeagueIconUrls {
122 small: "https://api-assets.clashofclans.com/leagues/72/U2acNDRaR5rQDu4Z6pQKaGcjWm9dkSnHMAPZCXrHPB4.png".to_string(),
123 tiny: "https://api-assets.clashofclans.com/leagues/36/U2acNDRaR5rQDu4Z6pQKaGcjWm9dkSnHMAPZCXrHPB4.png".to_string(),
124 medium: Some("https://api-assets.clashofclans.com/leagues/288/U2acNDRaR5rQDu4Z6pQKaGcjWm9dkSnHMAPZCXrHPB4.png".to_string()),
125 },
126 }
127 }
128
129 #[must_use]
130 pub fn BronzeLeagueI() -> Self {
131 Self {
132 id: LeagueKind::BronzeLeagueI,
133 name: "Bronze League I".to_string(),
134 icon_urls: LeagueIconUrls {
135 small: "https://api-assets.clashofclans.com/leagues/72/SZIXZHZxfHTmgseKCH6T5hvMQ3JQM-Js2QfpC9A3ya0.png".to_string(),
136 tiny: "https://api-assets.clashofclans.com/leagues/36/SZIXZHZxfHTmgseKCH6T5hvMQ3JQM-Js2QfpC9A3ya0.png".to_string(),
137 medium: Some("https://api-assets.clashofclans.com/leagues/288/SZIXZHZxfHTmgseKCH6T5hvMQ3JQM-Js2QfpC9A3ya0.png".to_string()),
138 },
139 }
140 }
141
142 #[must_use]
143 pub fn SilverLeagueIII() -> Self {
144 Self {
145 id: LeagueKind::SilverLeagueIII,
146 name: "Silver League III".to_string(),
147 icon_urls: LeagueIconUrls {
148 small: "https://api-assets.clashofclans.com/leagues/72/QcFBfoArnafaXCnB5OfI7vESpQEBuvWtzOyLq8gJzVc.png".to_string(),
149 tiny: "https://api-assets.clashofclans.com/leagues/36/QcFBfoArnafaXCnB5OfI7vESpQEBuvWtzOyLq8gJzVc.png".to_string(),
150 medium: Some("https://api-assets.clashofclans.com/leagues/288/QcFBfoArnafaXCnB5OfI7vESpQEBuvWtzOyLq8gJzVc.png".to_string()),
151 },
152 }
153 }
154
155 #[must_use]
156 pub fn SilverLeagueII() -> Self {
157 Self {
158 id: LeagueKind::SilverLeagueII,
159 name: "Silver League II".to_string(),
160 icon_urls: LeagueIconUrls {
161 small: "https://api-assets.clashofclans.com/leagues/72/8OhXcwDJkenBH2kPH73eXftFOpHHRF-b32n0yrTqC44.png".to_string(),
162 tiny: "https://api-assets.clashofclans.com/leagues/36/8OhXcwDJkenBH2kPH73eXftFOpHHRF-b32n0yrTqC44.png".to_string(),
163 medium: Some("https://api-assets.clashofclans.com/leagues/288/8OhXcwDJkenBH2kPH73eXftFOpHHRF-b32n0yrTqC44.png".to_string()),
164 },
165 }
166 }
167
168 #[must_use]
169 pub fn SilverLeagueI() -> Self {
170 Self {
171 id: LeagueKind::SilverLeagueI,
172 name: "Silver League I".to_string(),
173 icon_urls: LeagueIconUrls {
174 small: "https://api-assets.clashofclans.com/leagues/72/nvrBLvCK10elRHmD1g9w5UU1flDRMhYAojMB2UbYfPs.png".to_string(),
175 tiny: "https://api-assets.clashofclans.com/leagues/36/nvrBLvCK10elRHmD1g9w5UU1flDRMhYAojMB2UbYfPs.png".to_string(),
176 medium: Some("https://api-assets.clashofclans.com/leagues/288/nvrBLvCK10elRHmD1g9w5UU1flDRMhYAojMB2UbYfPs.png".to_string()),
177 },
178 }
179 }
180
181 #[must_use]
182 pub fn GoldLeagueIII() -> Self {
183 Self {
184 id: LeagueKind::GoldLeagueIII,
185 name: "Gold League III".to_string(),
186 icon_urls: LeagueIconUrls {
187 small: "https://api-assets.clashofclans.com/leagues/72/vd4Lhz5b2I1P0cLH25B6q63JN3Wt1j2NTMhOYpMPQ4M.png".to_string(),
188 tiny: "https://api-assets.clashofclans.com/leagues/36/vd4Lhz5b2I1P0cLH25B6q63JN3Wt1j2NTMhOYpMPQ4M.png".to_string(),
189 medium: Some("https://api-assets.clashofclans.com/leagues/288/vd4Lhz5b2I1P0cLH25B6q63JN3Wt1j2NTMhOYpMPQ4M.png".to_string()),
190 },
191 }
192 }
193
194 #[must_use]
195 pub fn GoldLeagueII() -> Self {
196 Self {
197 id: LeagueKind::GoldLeagueII,
198 name: "Gold League II".to_string(),
199 icon_urls: LeagueIconUrls {
200 small: "https://api-assets.clashofclans.com/leagues/72/Y6CveuHmPM_oiOic2Yet0rYL9AFRYW0WA0u2e44-YbM.png".to_string(),
201 tiny: "https://api-assets.clashofclans.com/leagues/36/Y6CveuHmPM_oiOic2Yet0rYL9AFRYW0WA0u2e44-YbM.png".to_string(),
202 medium: Some("https://api-assets.clashofclans.com/leagues/288/Y6CveuHmPM_oiOic2Yet0rYL9AFRYW0WA0u2e44-YbM.png".to_string()),
203 },
204 }
205 }
206
207 #[must_use]
208 pub fn GoldLeagueI() -> Self {
209 Self {
210 id: LeagueKind::GoldLeagueI,
211 name: "Gold League I".to_string(),
212 icon_urls: LeagueIconUrls {
213 small: "https://api-assets.clashofclans.com/leagues/72/CorhMY9ZmQvqXTZ4VYVuUgPNGSHsO0cEXEL5WYRmB2Y.png".to_string(),
214 tiny: "https://api-assets.clashofclans.com/leagues/36/CorhMY9ZmQvqXTZ4VYVuUgPNGSHsO0cEXEL5WYRmB2Y.png".to_string(),
215 medium: Some("https://api-assets.clashofclans.com/leagues/288/CorhMY9ZmQvqXTZ4VYVuUgPNGSHsO0cEXEL5WYRmB2Y.png".to_string()),
216 },
217 }
218 }
219
220 #[must_use]
221 pub fn CrystalLeagueIII() -> Self {
222 Self {
223 id: LeagueKind::CrystalLeagueIII,
224 name: "Crystal League III".to_string(),
225 icon_urls: LeagueIconUrls {
226 small: "https://api-assets.clashofclans.com/leagues/72/Hyqco7bHh0Q81xB8mSF_ZhjKnKcTmJ9QEq9QGlsxiKE.png".to_string(),
227 tiny: "https://api-assets.clashofclans.com/leagues/36/Hyqco7bHh0Q81xB8mSF_ZhjKnKcTmJ9QEq9QGlsxiKE.png".to_string(),
228 medium: Some("https://api-assets.clashofclans.com/leagues/288/Hyqco7bHh0Q81xB8mSF_ZhjKnKcTmJ9QEq9QGlsxiKE.png".to_string()),
229 },
230 }
231 }
232
233 #[must_use]
234 pub fn CrystalLeagueII() -> Self {
235 Self {
236 id: LeagueKind::CrystalLeagueII,
237 name: "Crystal League II".to_string(),
238 icon_urls: LeagueIconUrls {
239 small: "https://api-assets.clashofclans.com/leagues/72/jhP36EhAA9n1ADafdQtCP-ztEAQjoRpY7cT8sU7SW8A.png".to_string(),
240 tiny: "https://api-assets.clashofclans.com/leagues/36/jhP36EhAA9n1ADafdQtCP-ztEAQjoRpY7cT8sU7SW8A.png".to_string(),
241 medium: Some("https://api-assets.clashofclans.com/leagues/288/jhP36EhAA9n1ADafdQtCP-ztEAQjoRpY7cT8sU7SW8A.png".to_string()),
242 },
243 }
244 }
245
246 #[must_use]
247 pub fn CrystalLeagueI() -> Self {
248 Self {
249 id: LeagueKind::CrystalLeagueI,
250 name: "Crystal League I".to_string(),
251 icon_urls: LeagueIconUrls {
252 small: "https://api-assets.clashofclans.com/leagues/72/kSfTyNNVSvogX3dMvpFUTt72VW74w6vEsEFuuOV4osQ.png".to_string(),
253 tiny: "https://api-assets.clashofclans.com/leagues/36/kSfTyNNVSvogX3dMvpFUTt72VW74w6vEsEFuuOV4osQ.png".to_string(),
254 medium: Some("https://api-assets.clashofclans.com/leagues/288/kSfTyNNVSvogX3dMvpFUTt72VW74w6vEsEFuuOV4osQ.png".to_string()),
255 },
256 }
257 }
258
259 #[must_use]
260 pub fn MasterLeagueIII() -> Self {
261 Self {
262 id: LeagueKind::MasterLeagueIII,
263 name: "Master League III".to_string(),
264 icon_urls: LeagueIconUrls {
265 small: "https://api-assets.clashofclans.com/leagues/72/pSXfKvBKSgtvfOY3xKkgFaRQi0WcE28s3X35ywbIluY.png".to_string(),
266 tiny: "https://api-assets.clashofclans.com/leagues/36/pSXfKvBKSgtvfOY3xKkgFaRQi0WcE28s3X35ywbIluY.png".to_string(),
267 medium: Some("https://api-assets.clashofclans.com/leagues/288/pSXfKvBKSgtvfOY3xKkgFaRQi0WcE28s3X35ywbIluY.png".to_string()),
268 },
269 }
270 }
271
272 #[must_use]
273 pub fn MasterLeagueII() -> Self {
274 Self {
275 id: LeagueKind::MasterLeagueII,
276 name: "Master League II".to_string(),
277 icon_urls: LeagueIconUrls {
278 small: "https://api-assets.clashofclans.com/leagues/72/4wtS1stWZQ-1VJ5HaCuDPfdhTWjeZs_jPar_YPzK6Lg.png".to_string(),
279 tiny: "https://api-assets.clashofclans.com/leagues/36/4wtS1stWZQ-1VJ5HaCuDPfdhTWjeZs_jPar_YPzK6Lg.png".to_string(),
280 medium: Some("https://api-assets.clashofclans.com/leagues/288/4wtS1stWZQ-1VJ5HaCuDPfdhTWjeZs_jPar_YPzK6Lg.png".to_string()),
281 },
282 }
283 }
284
285 #[must_use]
286 pub fn MasterLeagueI() -> Self {
287 Self {
288 id: LeagueKind::MasterLeagueI,
289 name: "Master League I".to_string(),
290 icon_urls: LeagueIconUrls {
291 small: "https://api-assets.clashofclans.com/leagues/72/olUfFb1wscIH8hqECAdWbdB6jPm9R8zzEyHIzyBgRXc.png".to_string(),
292 tiny: "https://api-assets.clashofclans.com/leagues/36/olUfFb1wscIH8hqECAdWbdB6jPm9R8zzEyHIzyBgRXc.png".to_string(),
293 medium: Some("https://api-assets.clashofclans.com/leagues/288/olUfFb1wscIH8hqECAdWbdB6jPm9R8zzEyHIzyBgRXc.png".to_string()),
294 },
295 }
296 }
297
298 #[must_use]
299 pub fn ChampionLeagueIII() -> Self {
300 Self {
301 id: LeagueKind::ChampionLeagueIII,
302 name: "Champion League III".to_string(),
303 icon_urls: LeagueIconUrls {
304 small: "https://api-assets.clashofclans.com/leagues/72/JmmTbspV86xBigM7OP5_SjsEDPuE7oXjZC9aOy8xO3s.png".to_string(),
305 tiny: "https://api-assets.clashofclans.com/leagues/36/JmmTbspV86xBigM7OP5_SjsEDPuE7oXjZC9aOy8xO3s.png".to_string(),
306 medium: Some("https://api-assets.clashofclans.com/leagues/288/JmmTbspV86xBigM7OP5_SjsEDPuE7oXjZC9aOy8xO3s.png".to_string()),
307 },
308 }
309 }
310
311 #[must_use]
312 pub fn ChampionLeagueII() -> Self {
313 Self {
314 id: LeagueKind::ChampionLeagueII,
315 name: "Champion League II".to_string(),
316 icon_urls: LeagueIconUrls {
317 small: "https://api-assets.clashofclans.com/leagues/72/kLWSSyq7vJiRiCantiKCoFuSJOxief6R1ky6AyfB8q0.png".to_string(),
318 tiny: "https://api-assets.clashofclans.com/leagues/36/kLWSSyq7vJiRiCantiKCoFuSJOxief6R1ky6AyfB8q0.png".to_string(),
319 medium: Some("https://api-assets.clashofclans.com/leagues/288/kLWSSyq7vJiRiCantiKCoFuSJOxief6R1ky6AyfB8q0.png".to_string()),
320 },
321 }
322 }
323
324 #[must_use]
325 pub fn ChampionLeagueI() -> Self {
326 Self {
327 id: LeagueKind::ChampionLeagueI,
328 name: "Champion League I".to_string(),
329 icon_urls: LeagueIconUrls {
330 small: "https://api-assets.clashofclans.com/leagues/72/9v_04LHmd1LWq7IoY45dAdGhrBkrc2ZFMZVhe23PdCE.png".to_string(),
331 tiny: "https://api-assets.clashofclans.com/leagues/36/9v_04LHmd1LWq7IoY45dAdGhrBkrc2ZFMZVhe23PdCE.png".to_string(),
332 medium: Some("https://api-assets.clashofclans.com/leagues/288/9v_04LHmd1LWq7IoY45dAdGhrBkrc2ZFMZVhe23PdCE.png".to_string()),
333 },
334 }
335 }
336
337 #[must_use]
338 pub fn TitanLeagueIII() -> Self {
339 Self {
340 id: LeagueKind::TitanLeagueIII,
341 name: "Titan League III".to_string(),
342 icon_urls: LeagueIconUrls {
343 small: "https://api-assets.clashofclans.com/leagues/72/L-HrwYpFbDwWjdmhJQiZiTRa_zXPPOgUTdmbsaq4meo.png".to_string(),
344 tiny: "https://api-assets.clashofclans.com/leagues/36/L-HrwYpFbDwWjdmhJQiZiTRa_zXPPOgUTdmbsaq4meo.png".to_string(),
345 medium: Some("https://api-assets.clashofclans.com/leagues/288/L-HrwYpFbDwWjdmhJQiZiTRa_zXPPOgUTdmbsaq4meo.png".to_string()),
346 },
347 }
348 }
349
350 #[must_use]
351 pub fn TitanLeagueII() -> Self {
352 Self {
353 id: LeagueKind::TitanLeagueII,
354 name: "Titan League II".to_string(),
355 icon_urls: LeagueIconUrls {
356 small: "https://api-assets.clashofclans.com/leagues/72/llpWocHlOoFliwyaEx5Z6dmoZG4u4NmxwpF-Jg7su7Q.png".to_string(),
357 tiny: "https://api-assets.clashofclans.com/leagues/36/llpWocHlOoFliwyaEx5Z6dmoZG4u4NmxwpF-Jg7su7Q.png".to_string(),
358 medium: Some("https://api-assets.clashofclans.com/leagues/288/llpWocHlOoFliwyaEx5Z6dmoZG4u4NmxwpF-Jg7su7Q.png".to_string()),
359 },
360 }
361 }
362
363 #[must_use]
364 pub fn TitanLeagueI() -> Self {
365 Self {
366 id: LeagueKind::TitanLeagueI,
367 name: "Titan League I".to_string(),
368 icon_urls: LeagueIconUrls {
369 small: "https://api-assets.clashofclans.com/leagues/72/qVCZmeYH0lS7Gaa6YoB7LrNly7bfw7fV_d4Vp2CU-gk.png".to_string(),
370 tiny: "https://api-assets.clashofclans.com/leagues/36/qVCZmeYH0lS7Gaa6YoB7LrNly7bfw7fV_d4Vp2CU-gk.png".to_string(),
371 medium: Some("https://api-assets.clashofclans.com/leagues/288/qVCZmeYH0lS7Gaa6YoB7LrNly7bfw7fV_d4Vp2CU-gk.png".to_string()),
372 },
373 }
374 }
375
376 #[must_use]
377 pub fn LegendLeague() -> Self {
378 Self {
379 id: LeagueKind::LegendLeague,
380 name: "Legend League".to_string(),
381 icon_urls: LeagueIconUrls {
382 small: "https://api-assets.clashofclans.com/leagues/72/R2zmhyqQ0_lKcDR5EyghXCxgyC9mm_mVMIjAbmGoZtw.png".to_string(),
383 tiny: "https://api-assets.clashofclans.com/leagues/36/R2zmhyqQ0_lKcDR5EyghXCxgyC9mm_mVMIjAbmGoZtw.png".to_string(),
384 medium: Some("https://api-assets.clashofclans.com/leagues/288/R2zmhyqQ0_lKcDR5EyghXCxgyC9mm_mVMIjAbmGoZtw.png".to_string()),
385 },
386 }
387 }
388}