coc_rs/models/
leagues.rs

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/// I need to think of a better way to do this, enum variants with struct types seem stupid as they're all the same type.
88#[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}