1use crate::try_from_deserialize_impl;
2use serde::Serialize;
3use std::fmt::{Display, Formatter};
4use thiserror::Error;
5
6#[derive(Debug, Serialize, Clone, PartialEq)]
8pub enum Engineer {
9 DidiVatermann,
10 BillTurner,
11 BrooTarquin,
12 TheSarge,
13 ZacariahNemo,
14 LizRyder,
15 HeraTani,
16 FelicityFarseer,
17 RamTah,
18 LeiCheung,
19 PetraOlmanova,
20 ColonelBrisDekker,
21 MarshaHicks,
22 ElviraMartuuk,
23 TheDweller,
24 MarcoQwent,
25 SeleneJean,
26 ProfessorPalin,
27 LoriJameson,
28 JuriIshmaak,
29 TodTheBlasterMcQuinn,
30 TianaFortune,
31 MelBrandon,
32 EtienneDorn,
33 ChloeSedesi,
34 JudeNavarro,
35 DominoGreen,
36 HeroFerrari,
37 KitFowler,
38 WellingtonBeck,
39 TerraVelasquez,
40 UmaLaszlo,
41 OdenGeiger,
42 YardenBond,
43 Baltanos,
44 EleanorBresa,
45 RosaDayette,
46 YiShen,
47
48 System,
51}
52
53impl Engineer {
54 pub fn id(&self) -> u64 {
55 match self {
56 Engineer::DidiVatermann => 300000,
57 Engineer::BillTurner => 300010,
58 Engineer::BrooTarquin => 300030,
59 Engineer::TheSarge => 300040,
60 Engineer::ZacariahNemo => 300050,
61 Engineer::LizRyder => 300080,
62 Engineer::HeraTani => 300090,
63 Engineer::FelicityFarseer => 300100,
64 Engineer::RamTah => 300110,
65 Engineer::LeiCheung => 300120,
66 Engineer::PetraOlmanova => 300130,
67 Engineer::ColonelBrisDekker => 300140,
68 Engineer::MarshaHicks => 300150,
69 Engineer::ElviraMartuuk => 300160,
70 Engineer::TheDweller => 300180,
71 Engineer::MarcoQwent => 300200,
72 Engineer::SeleneJean => 300210,
73 Engineer::ProfessorPalin => 300220,
74 Engineer::LoriJameson => 300230,
75 Engineer::JuriIshmaak => 300250,
76 Engineer::TodTheBlasterMcQuinn => 300260,
77 Engineer::TianaFortune => 300270,
78 Engineer::MelBrandon => 300280,
79 Engineer::EtienneDorn => 300290,
80 Engineer::ChloeSedesi => 300300,
81 Engineer::JudeNavarro => 400001,
82 Engineer::DominoGreen => 400002,
83 Engineer::HeroFerrari => 400003,
84 Engineer::KitFowler => 400004,
85 Engineer::WellingtonBeck => 400005,
86 Engineer::TerraVelasquez => 400006,
87 Engineer::UmaLaszlo => 400007,
88 Engineer::OdenGeiger => 400008,
89 Engineer::YardenBond => 400009,
90 Engineer::Baltanos => 400010,
91 Engineer::EleanorBresa => 400011,
92 Engineer::RosaDayette => 400012,
93 Engineer::YiShen => 400013,
94 Engineer::System => 399999,
95 }
96 }
97
98 pub fn get_system_address(&self) -> u64 {
99 match self {
100 Engineer::DidiVatermann => 3932277478114,
101 Engineer::BillTurner => 1109989017963,
102 Engineer::BrooTarquin => 4481966019282,
103 Engineer::TheSarge => 2827992680811,
104 Engineer::ZacariahNemo => 6131367744226,
105 Engineer::LizRyder => 1458309141194,
106 Engineer::HeraTani => 1733321102034,
107 Engineer::FelicityFarseer => 6681123623626,
108 Engineer::RamTah => 3790082132323,
109 Engineer::LeiCheung => 4305444669811,
110 Engineer::PetraOlmanova => 12274907287851,
111 Engineer::ColonelBrisDekker => 10477373803,
112 Engineer::MarshaHicks => 48996147307082,
113 Engineer::ElviraMartuuk => 3107241104074,
114 Engineer::TheDweller => 5031654888146,
115 Engineer::MarcoQwent => 121569805492,
116 Engineer::SeleneJean => 24859942069665,
117 Engineer::ProfessorPalin => 113573366131,
118 Engineer::LoriJameson => 3932277478106,
119 Engineer::JuriIshmaak => 4481899074282,
120 Engineer::TodTheBlasterMcQuinn => 3107576681170,
121 Engineer::TianaFortune => 164098653,
122 Engineer::MelBrandon => 66038577537618,
123 Engineer::EtienneDorn => 11887629902418,
124 Engineer::ChloeSedesi => 594676730147,
125 Engineer::JudeNavarro => 7268024067513,
126 Engineer::DominoGreen => 5068464399785,
127 Engineer::HeroFerrari => 7269634614689,
128 Engineer::KitFowler => 2827975936355,
129 Engineer::WellingtonBeck => 2832832893634,
130 Engineer::TerraVelasquez => 3721329101171,
131 Engineer::UmaLaszlo => 16065190962585,
132 Engineer::OdenGeiger => 8879744226018,
133 Engineer::YardenBond => 670686455169,
134 Engineer::Baltanos => 71536135676490,
135 Engineer::EleanorBresa => 38001031029322,
136 Engineer::RosaDayette => 59166629864010,
137 Engineer::YiShen => 13736779007129,
138 Engineer::System => 0,
139 }
140 }
141
142 pub fn get_market_id(&self) -> u64 {
143 match self {
144 Engineer::DidiVatermann => 128673927,
145 Engineer::BillTurner => 128674183,
146 Engineer::BrooTarquin => 128674695,
147 Engineer::TheSarge => 128674951,
148 Engineer::ZacariahNemo => 128675207,
149 Engineer::LizRyder => 128675975,
150 Engineer::HeraTani => 128676231,
151 Engineer::FelicityFarseer => 128676487,
152 Engineer::RamTah => 128676743,
153 Engineer::LeiCheung => 128676999,
154 Engineer::PetraOlmanova => 128677255,
155 Engineer::ColonelBrisDekker => 128677511,
156 Engineer::MarshaHicks => 128677767,
157 Engineer::ElviraMartuuk => 128678023,
158 Engineer::TheDweller => 128678535,
159 Engineer::MarcoQwent => 128679047,
160 Engineer::SeleneJean => 128679303,
161 Engineer::ProfessorPalin => 128679559,
162 Engineer::LoriJameson => 128679815,
163 Engineer::JuriIshmaak => 128680327,
164 Engineer::TodTheBlasterMcQuinn => 128680583,
165 Engineer::TianaFortune => 128680839,
166 Engineer::MelBrandon => 128681095,
167 Engineer::EtienneDorn => 128681351,
168 Engineer::ChloeSedesi => 128954244,
169 Engineer::JudeNavarro => 128972903,
170 Engineer::DominoGreen => 128973159,
171 Engineer::HeroFerrari => 128973415,
172 Engineer::KitFowler => 128973671,
173 Engineer::WellingtonBeck => 128973927,
174 Engineer::TerraVelasquez => 128974183,
175 Engineer::UmaLaszlo => 128974439,
176 Engineer::OdenGeiger => 128974695,
177 Engineer::YardenBond => 128974951,
178 Engineer::Baltanos => 128986843,
179 Engineer::EleanorBresa => 128987099,
180 Engineer::RosaDayette => 128986587,
181 Engineer::YiShen => 128987355,
182 Engineer::System => 0,
183 }
184 }
185}
186
187impl Display for Engineer {
188 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
189 write!(
190 f,
191 "{}",
192 match self {
193 Engineer::DidiVatermann => "Didi Vatermann",
194 Engineer::BillTurner => "Bill Turner",
195 Engineer::BrooTarquin => "Broo Tarquin",
196 Engineer::TheSarge => "The Sarge",
197 Engineer::ZacariahNemo => "Zacariah Nemo",
198 Engineer::LizRyder => "Liz Ryder",
199 Engineer::HeraTani => "Hera Tani",
200 Engineer::FelicityFarseer => "Felicity Farseer",
201 Engineer::RamTah => "Ram Tah",
202 Engineer::LeiCheung => "Lei Cheung",
203 Engineer::PetraOlmanova => "Petra Olmanova",
204 Engineer::ColonelBrisDekker => "Colonel Bris Dekker",
205 Engineer::MarshaHicks => "Marsha Hicks",
206 Engineer::ElviraMartuuk => "Elvira Martuuk",
207 Engineer::TheDweller => "The Dweller",
208 Engineer::MarcoQwent => "Marco Qwent",
209 Engineer::SeleneJean => "Selene Jean",
210 Engineer::ProfessorPalin => "Professor Palin",
211 Engineer::LoriJameson => "Lori Jameson",
212 Engineer::JuriIshmaak => "Juri Ishmaak",
213 Engineer::TodTheBlasterMcQuinn => "Tod 'The Blaster' McQuinn",
214 Engineer::TianaFortune => "Tiana Fortune",
215 Engineer::MelBrandon => "Mel Brandon",
216 Engineer::EtienneDorn => "Etienne Dorn",
217 Engineer::ChloeSedesi => "Chloe Sedesi",
218 Engineer::JudeNavarro => "Jude Navarro",
219 Engineer::DominoGreen => "Domino Green",
220 Engineer::HeroFerrari => "Hero Ferrari",
221 Engineer::KitFowler => "Kit Fowler",
222 Engineer::WellingtonBeck => "Wellington Beck",
223 Engineer::TerraVelasquez => "Terra Velasquez",
224 Engineer::UmaLaszlo => "Uma Laszlo",
225 Engineer::OdenGeiger => "Oden Geiger",
226 Engineer::YardenBond => "Yarden Bond",
227 Engineer::Baltanos => "Baltanos",
228 Engineer::EleanorBresa => "Eleanor Bresa",
229 Engineer::RosaDayette => "Rosa Dayette",
230 Engineer::YiShen => "Yi Shen",
231 Engineer::System => "System",
232 }
233 )
234 }
235}
236
237#[derive(Debug, Error)]
238pub enum EngineerError {
239 #[error("Unknown engineer for id: {0}")]
240 UnknownEngineerId(u64),
241}
242
243impl TryFrom<u64> for Engineer {
244 type Error = EngineerError;
245
246 fn try_from(value: u64) -> Result<Self, Self::Error> {
247 Ok(match value {
248 300000 => Engineer::DidiVatermann,
249 300010 => Engineer::BillTurner,
250 300030 => Engineer::BrooTarquin,
251 300040 => Engineer::TheSarge,
252 300050 => Engineer::ZacariahNemo,
253 300080 => Engineer::LizRyder,
254 300090 => Engineer::HeraTani,
255 300100 => Engineer::FelicityFarseer,
256 300110 => Engineer::RamTah,
257 300120 => Engineer::LeiCheung,
258 300130 => Engineer::PetraOlmanova,
259 300140 => Engineer::ColonelBrisDekker,
260 300150 => Engineer::MarshaHicks,
261 300160 => Engineer::ElviraMartuuk,
262 300180 => Engineer::TheDweller,
263 300200 => Engineer::MarcoQwent,
264 300210 => Engineer::SeleneJean,
265 300220 => Engineer::ProfessorPalin,
266 300230 => Engineer::LoriJameson,
267 300250 => Engineer::JuriIshmaak,
268 300260 => Engineer::TodTheBlasterMcQuinn,
269 300270 => Engineer::TianaFortune,
270 300280 => Engineer::MelBrandon,
271 300290 => Engineer::EtienneDorn,
272 300300 => Engineer::ChloeSedesi,
273 400001 => Engineer::JudeNavarro,
274 400002 => Engineer::DominoGreen,
275 400003 => Engineer::HeroFerrari,
276 400004 => Engineer::KitFowler,
277 400005 => Engineer::WellingtonBeck,
278 400006 => Engineer::TerraVelasquez,
279 400007 => Engineer::UmaLaszlo,
280 400008 => Engineer::OdenGeiger,
281 400009 => Engineer::YardenBond,
282 400010 => Engineer::Baltanos,
283 400011 => Engineer::EleanorBresa,
284 400012 => Engineer::RosaDayette,
285 400013 => Engineer::YiShen,
286 399999 => Engineer::System,
287
288 _ => return Err(EngineerError::UnknownEngineerId(value)),
289 })
290 }
291}
292
293try_from_deserialize_impl!(u64 => Engineer);