1#[derive(Debug, PartialEq, Eq, Hash, Ord, PartialOrd, Copy, Clone)]
51#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
52pub enum Map {
53 EasternKingdoms,
54 Kalimdor,
55 Testing,
56 ScottTest,
57 CashTest,
58 AlteracValley,
59 ShadowfangKeep,
60 StormwindStockade,
61 StormwindPrison,
62 Deadmines,
63 AzsharaCrater,
64 CollinsTest,
65 WailingCaverns,
66 MonasteryUnused,
67 RazorfenKraul,
68 BlackfathomDeeps,
69 Uldaman,
70 Gnomeregan,
71 SunkenTemple,
72 RazorfenDowns,
73 EmeraldDream,
74 ScarletMonastery,
75 ZulFarrak,
76 BlackrockSpire,
77 BlackrockDepths,
78 OnyxiasLair,
79 OpeningOfTheDarkPortal,
81 Scholomance,
82 ZulGurub,
83 Stratholme,
84 Maraudon,
85 DeeprunTram,
86 RagefireChasm,
87 MoltenCore,
88 DireMaul,
89 AlliancePvpBarracks,
90 HordePvpBarracks,
91 DevelopmentLand,
92 BlackwingLair,
93 WarsongGulch,
94 RuinsOfAhnQiraj,
95 ArathiBasin,
96 AhnQirajTemple,
97 Naxxramas,
98}
99
100impl Map {
101 pub const fn as_int(&self) -> u32 {
102 match self {
103 Self::EasternKingdoms => 0x0,
104 Self::Kalimdor => 0x1,
105 Self::Testing => 0xd,
106 Self::ScottTest => 0x19,
107 Self::CashTest => 0x1d,
108 Self::AlteracValley => 0x1e,
109 Self::ShadowfangKeep => 0x21,
110 Self::StormwindStockade => 0x22,
111 Self::StormwindPrison => 0x23,
112 Self::Deadmines => 0x24,
113 Self::AzsharaCrater => 0x25,
114 Self::CollinsTest => 0x2a,
115 Self::WailingCaverns => 0x2b,
116 Self::MonasteryUnused => 0x2c,
117 Self::RazorfenKraul => 0x2f,
118 Self::BlackfathomDeeps => 0x30,
119 Self::Uldaman => 0x46,
120 Self::Gnomeregan => 0x5a,
121 Self::SunkenTemple => 0x6d,
122 Self::RazorfenDowns => 0x81,
123 Self::EmeraldDream => 0xa9,
124 Self::ScarletMonastery => 0xbd,
125 Self::ZulFarrak => 0xd1,
126 Self::BlackrockSpire => 0xe5,
127 Self::BlackrockDepths => 0xe6,
128 Self::OnyxiasLair => 0xf9,
129 Self::OpeningOfTheDarkPortal => 0x10d,
130 Self::Scholomance => 0x121,
131 Self::ZulGurub => 0x135,
132 Self::Stratholme => 0x149,
133 Self::Maraudon => 0x15d,
134 Self::DeeprunTram => 0x171,
135 Self::RagefireChasm => 0x185,
136 Self::MoltenCore => 0x199,
137 Self::DireMaul => 0x1ad,
138 Self::AlliancePvpBarracks => 0x1c1,
139 Self::HordePvpBarracks => 0x1c2,
140 Self::DevelopmentLand => 0x1c3,
141 Self::BlackwingLair => 0x1d5,
142 Self::WarsongGulch => 0x1e9,
143 Self::RuinsOfAhnQiraj => 0x1fd,
144 Self::ArathiBasin => 0x211,
145 Self::AhnQirajTemple => 0x213,
146 Self::Naxxramas => 0x215,
147 }
148 }
149
150 pub const fn variants() -> [Self; 44] {
151 [
152 Self::EasternKingdoms,
153 Self::Kalimdor,
154 Self::Testing,
155 Self::ScottTest,
156 Self::CashTest,
157 Self::AlteracValley,
158 Self::ShadowfangKeep,
159 Self::StormwindStockade,
160 Self::StormwindPrison,
161 Self::Deadmines,
162 Self::AzsharaCrater,
163 Self::CollinsTest,
164 Self::WailingCaverns,
165 Self::MonasteryUnused,
166 Self::RazorfenKraul,
167 Self::BlackfathomDeeps,
168 Self::Uldaman,
169 Self::Gnomeregan,
170 Self::SunkenTemple,
171 Self::RazorfenDowns,
172 Self::EmeraldDream,
173 Self::ScarletMonastery,
174 Self::ZulFarrak,
175 Self::BlackrockSpire,
176 Self::BlackrockDepths,
177 Self::OnyxiasLair,
178 Self::OpeningOfTheDarkPortal,
179 Self::Scholomance,
180 Self::ZulGurub,
181 Self::Stratholme,
182 Self::Maraudon,
183 Self::DeeprunTram,
184 Self::RagefireChasm,
185 Self::MoltenCore,
186 Self::DireMaul,
187 Self::AlliancePvpBarracks,
188 Self::HordePvpBarracks,
189 Self::DevelopmentLand,
190 Self::BlackwingLair,
191 Self::WarsongGulch,
192 Self::RuinsOfAhnQiraj,
193 Self::ArathiBasin,
194 Self::AhnQirajTemple,
195 Self::Naxxramas,
196 ]
197 }
198
199 pub const fn from_int(value: u32) -> Result<Self, crate::errors::EnumError> {
200 match value {
201 0 => Ok(Self::EasternKingdoms),
202 1 => Ok(Self::Kalimdor),
203 13 => Ok(Self::Testing),
204 25 => Ok(Self::ScottTest),
205 29 => Ok(Self::CashTest),
206 30 => Ok(Self::AlteracValley),
207 33 => Ok(Self::ShadowfangKeep),
208 34 => Ok(Self::StormwindStockade),
209 35 => Ok(Self::StormwindPrison),
210 36 => Ok(Self::Deadmines),
211 37 => Ok(Self::AzsharaCrater),
212 42 => Ok(Self::CollinsTest),
213 43 => Ok(Self::WailingCaverns),
214 44 => Ok(Self::MonasteryUnused),
215 47 => Ok(Self::RazorfenKraul),
216 48 => Ok(Self::BlackfathomDeeps),
217 70 => Ok(Self::Uldaman),
218 90 => Ok(Self::Gnomeregan),
219 109 => Ok(Self::SunkenTemple),
220 129 => Ok(Self::RazorfenDowns),
221 169 => Ok(Self::EmeraldDream),
222 189 => Ok(Self::ScarletMonastery),
223 209 => Ok(Self::ZulFarrak),
224 229 => Ok(Self::BlackrockSpire),
225 230 => Ok(Self::BlackrockDepths),
226 249 => Ok(Self::OnyxiasLair),
227 269 => Ok(Self::OpeningOfTheDarkPortal),
228 289 => Ok(Self::Scholomance),
229 309 => Ok(Self::ZulGurub),
230 329 => Ok(Self::Stratholme),
231 349 => Ok(Self::Maraudon),
232 369 => Ok(Self::DeeprunTram),
233 389 => Ok(Self::RagefireChasm),
234 409 => Ok(Self::MoltenCore),
235 429 => Ok(Self::DireMaul),
236 449 => Ok(Self::AlliancePvpBarracks),
237 450 => Ok(Self::HordePvpBarracks),
238 451 => Ok(Self::DevelopmentLand),
239 469 => Ok(Self::BlackwingLair),
240 489 => Ok(Self::WarsongGulch),
241 509 => Ok(Self::RuinsOfAhnQiraj),
242 529 => Ok(Self::ArathiBasin),
243 531 => Ok(Self::AhnQirajTemple),
244 533 => Ok(Self::Naxxramas),
245 v => Err(crate::errors::EnumError::new(NAME, v as i128),)
246 }
247 }
248}
249
250#[cfg(feature = "print-testcase")]
251impl Map {
252 pub const fn as_test_case_value(&self) -> &'static str {
253 match self {
254 Self::EasternKingdoms => "EASTERN_KINGDOMS",
255 Self::Kalimdor => "KALIMDOR",
256 Self::Testing => "TESTING",
257 Self::ScottTest => "SCOTT_TEST",
258 Self::CashTest => "CASH_TEST",
259 Self::AlteracValley => "ALTERAC_VALLEY",
260 Self::ShadowfangKeep => "SHADOWFANG_KEEP",
261 Self::StormwindStockade => "STORMWIND_STOCKADE",
262 Self::StormwindPrison => "STORMWIND_PRISON",
263 Self::Deadmines => "DEADMINES",
264 Self::AzsharaCrater => "AZSHARA_CRATER",
265 Self::CollinsTest => "COLLINS_TEST",
266 Self::WailingCaverns => "WAILING_CAVERNS",
267 Self::MonasteryUnused => "MONASTERY_UNUSED",
268 Self::RazorfenKraul => "RAZORFEN_KRAUL",
269 Self::BlackfathomDeeps => "BLACKFATHOM_DEEPS",
270 Self::Uldaman => "ULDAMAN",
271 Self::Gnomeregan => "GNOMEREGAN",
272 Self::SunkenTemple => "SUNKEN_TEMPLE",
273 Self::RazorfenDowns => "RAZORFEN_DOWNS",
274 Self::EmeraldDream => "EMERALD_DREAM",
275 Self::ScarletMonastery => "SCARLET_MONASTERY",
276 Self::ZulFarrak => "ZUL_FARRAK",
277 Self::BlackrockSpire => "BLACKROCK_SPIRE",
278 Self::BlackrockDepths => "BLACKROCK_DEPTHS",
279 Self::OnyxiasLair => "ONYXIAS_LAIR",
280 Self::OpeningOfTheDarkPortal => "OPENING_OF_THE_DARK_PORTAL",
281 Self::Scholomance => "SCHOLOMANCE",
282 Self::ZulGurub => "ZUL_GURUB",
283 Self::Stratholme => "STRATHOLME",
284 Self::Maraudon => "MARAUDON",
285 Self::DeeprunTram => "DEEPRUN_TRAM",
286 Self::RagefireChasm => "RAGEFIRE_CHASM",
287 Self::MoltenCore => "MOLTEN_CORE",
288 Self::DireMaul => "DIRE_MAUL",
289 Self::AlliancePvpBarracks => "ALLIANCE_PVP_BARRACKS",
290 Self::HordePvpBarracks => "HORDE_PVP_BARRACKS",
291 Self::DevelopmentLand => "DEVELOPMENT_LAND",
292 Self::BlackwingLair => "BLACKWING_LAIR",
293 Self::WarsongGulch => "WARSONG_GULCH",
294 Self::RuinsOfAhnQiraj => "RUINS_OF_AHN_QIRAJ",
295 Self::ArathiBasin => "ARATHI_BASIN",
296 Self::AhnQirajTemple => "AHN_QIRAJ_TEMPLE",
297 Self::Naxxramas => "NAXXRAMAS",
298 }
299 }
300
301}
302
303const NAME: &str = "Map";
304
305impl Default for Map {
306 fn default() -> Self {
307 Self::EasternKingdoms
308 }
309}
310
311impl std::fmt::Display for Map {
312 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
313 match self {
314 Self::EasternKingdoms => f.write_str("Eastern Kingdoms"),
315 Self::Kalimdor => f.write_str("Kalimdor"),
316 Self::Testing => f.write_str("Testing"),
317 Self::ScottTest => f.write_str("Scott Test"),
318 Self::CashTest => f.write_str("CashTest"),
319 Self::AlteracValley => f.write_str("Alterac Valley"),
320 Self::ShadowfangKeep => f.write_str("Shadowfang Keep"),
321 Self::StormwindStockade => f.write_str("Stormwind Stockade"),
322 Self::StormwindPrison => f.write_str("Stormwind Prison"),
323 Self::Deadmines => f.write_str("Deadmines"),
324 Self::AzsharaCrater => f.write_str("Azshara Crater"),
325 Self::CollinsTest => f.write_str("Collin's Test"),
326 Self::WailingCaverns => f.write_str("Wailing Caverns"),
327 Self::MonasteryUnused => f.write_str("<Unused> Monastery"),
328 Self::RazorfenKraul => f.write_str("Razorfen Kraul"),
329 Self::BlackfathomDeeps => f.write_str("Blackfathom Deeps"),
330 Self::Uldaman => f.write_str("Uldaman"),
331 Self::Gnomeregan => f.write_str("Gnomeregan"),
332 Self::SunkenTemple => f.write_str("Sunken Temple"),
333 Self::RazorfenDowns => f.write_str("Razorfen Downs"),
334 Self::EmeraldDream => f.write_str("Emerald Dream"),
335 Self::ScarletMonastery => f.write_str("Scarlet Monastery"),
336 Self::ZulFarrak => f.write_str("Zul'Farrak"),
337 Self::BlackrockSpire => f.write_str("Blackrock Spire"),
338 Self::BlackrockDepths => f.write_str("Blackrock Depths"),
339 Self::OnyxiasLair => f.write_str("Onyxia's Lair"),
340 Self::OpeningOfTheDarkPortal => f.write_str("Opening of the Dark Portal"),
341 Self::Scholomance => f.write_str("Scholomance"),
342 Self::ZulGurub => f.write_str("Zul'Gurub"),
343 Self::Stratholme => f.write_str("Stratholme"),
344 Self::Maraudon => f.write_str("Maraudon"),
345 Self::DeeprunTram => f.write_str("Deeprun Tram"),
346 Self::RagefireChasm => f.write_str("Ragefire Chasm"),
347 Self::MoltenCore => f.write_str("Molten Core"),
348 Self::DireMaul => f.write_str("Dire Maul"),
349 Self::AlliancePvpBarracks => f.write_str("Alliance PVP Barracks"),
350 Self::HordePvpBarracks => f.write_str("Horde PVP Barracks"),
351 Self::DevelopmentLand => f.write_str("Development Land"),
352 Self::BlackwingLair => f.write_str("Blackwing Lair"),
353 Self::WarsongGulch => f.write_str("Warsong Gulch"),
354 Self::RuinsOfAhnQiraj => f.write_str("Ruins of Ahn'Qiraj"),
355 Self::ArathiBasin => f.write_str("Arathi Basin"),
356 Self::AhnQirajTemple => f.write_str("Ahn'Qiraj Temple"),
357 Self::Naxxramas => f.write_str("Naxxramas"),
358 }
359 }
360}
361
362impl TryFrom<u32> for Map {
363 type Error = crate::errors::EnumError;
364 fn try_from(value: u32) -> Result<Self, Self::Error> {
365 Self::from_int(value)
366 }
367}
368
369impl TryFrom<u8> for Map {
370 type Error = crate::errors::EnumError;
371 fn try_from(value: u8) -> Result<Self, Self::Error> {
372 Self::from_int(value.into())
373 }
374}
375
376impl TryFrom<u16> for Map {
377 type Error = crate::errors::EnumError;
378 fn try_from(value: u16) -> Result<Self, Self::Error> {
379 Self::from_int(value.into())
380 }
381}
382
383impl TryFrom<u64> for Map {
384 type Error = crate::errors::EnumError;
385 fn try_from(value: u64) -> Result<Self, Self::Error> {
386 TryInto::<u32>::try_into(value)
387 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
388 .try_into()
389 }
390}
391
392impl TryFrom<i8> for Map {
393 type Error = crate::errors::EnumError;
394 fn try_from(value: i8) -> Result<Self, Self::Error> {
395 TryInto::<u32>::try_into(value)
396 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
397 .try_into()
398 }
399}
400
401impl TryFrom<i16> for Map {
402 type Error = crate::errors::EnumError;
403 fn try_from(value: i16) -> Result<Self, Self::Error> {
404 TryInto::<u32>::try_into(value)
405 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
406 .try_into()
407 }
408}
409
410impl TryFrom<i32> for Map {
411 type Error = crate::errors::EnumError;
412 fn try_from(value: i32) -> Result<Self, Self::Error> {
413 let v = u32::from_le_bytes(value.to_le_bytes());
414 Self::from_int(v)
415 }
416}
417
418impl TryFrom<i64> for Map {
419 type Error = crate::errors::EnumError;
420 fn try_from(value: i64) -> Result<Self, Self::Error> {
421 TryInto::<u32>::try_into(value)
422 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
423 .try_into()
424 }
425}
426
427impl TryFrom<usize> for Map {
428 type Error = crate::errors::EnumError;
429 fn try_from(value: usize) -> Result<Self, Self::Error> {
430 TryInto::<u32>::try_into(value)
431 .map_err(|_| crate::errors::EnumError::new(NAME, value as i128))?
432 .try_into()
433 }
434}
435