1use std::fmt::{Display, Formatter};
2
3use serde::Serialize;
4use strum::EnumIter;
5
6use crate::modules::materials::Material;
7
8#[derive(Debug, Serialize, EnumIter)]
9pub enum MaterialGroup {
10 RawMaterials1,
12 RawMaterials2,
13 RawMaterials3,
14 RawMaterials4,
15 RawMaterials5,
16 RawMaterials6,
17 RawMaterials7,
18
19 Chemical,
21 Thermic,
22 Heat,
23 Conductive,
24 MechanicalComponents,
25 Capacitors,
26 Shielding,
27 Composite,
28 Crystal,
29 Alloys,
30
31 EmissionData,
33 WakeScans,
34 ShieldData,
35 EncryptionFiles,
36 DataArchives,
37 EncodedFirmware,
38}
39
40impl MaterialGroup {
41 pub fn materials(&self) -> Vec<Material> {
42 match self {
43 MaterialGroup::RawMaterials1 => vec![
45 Material::Carbon,
46 Material::Vanadium,
47 Material::Niobium,
48 Material::Yttrium,
49 ],
50 MaterialGroup::RawMaterials2 => vec![
51 Material::Phosphorus,
52 Material::Chromium,
53 Material::Molybdenum,
54 Material::Technetium,
55 ],
56 MaterialGroup::RawMaterials3 => vec![
57 Material::Sulphur,
58 Material::Manganese,
59 Material::Cadmium,
60 Material::Ruthenium,
61 ],
62 MaterialGroup::RawMaterials4 => vec![
63 Material::Iron,
64 Material::Zinc,
65 Material::Tin,
66 Material::Selenium,
67 ],
68 MaterialGroup::RawMaterials5 => vec![
69 Material::Nickel,
70 Material::Germanium,
71 Material::Tungsten,
72 Material::Tellurium,
73 ],
74 MaterialGroup::RawMaterials6 => vec![
75 Material::Rhenium,
76 Material::Arsenic,
77 Material::Mercury,
78 Material::Polonium,
79 ],
80 MaterialGroup::RawMaterials7 => vec![
81 Material::Lead,
82 Material::Zirconium,
83 Material::Boron,
84 Material::Antimony,
85 ],
86
87 MaterialGroup::Chemical => vec![
89 Material::ChemicalStorageUnits,
90 Material::ChemicalProcessors,
91 Material::ChemicalDistillery,
92 Material::ChemicalManipulators,
93 Material::PharmaceuticalIsolators,
94 ],
95 MaterialGroup::Thermic => vec![
96 Material::TemperedAlloys,
97 Material::HeatResistantCeramics,
98 Material::PrecipitatedAlloys,
99 Material::ThermicAlloys,
100 Material::MilitaryGradeAlloys,
101 ],
102 MaterialGroup::Heat => vec![
103 Material::HeatConductionWiring,
104 Material::HeatDispersionPlate,
105 Material::HeatExchangers,
106 Material::HeatVanes,
107 Material::ProtoHeatRadiators,
108 ],
109 MaterialGroup::Conductive => vec![
110 Material::BasicConductors,
111 Material::ConductiveComponents,
112 Material::ConductiveCeramics,
113 Material::ConductivePolymers,
114 Material::BiotechConductors,
115 ],
116 MaterialGroup::MechanicalComponents => vec![
117 Material::MechanicalScrap,
118 Material::MechanicalEquipment,
119 Material::MechanicalComponents,
120 Material::ConfigurableComponents,
121 Material::ImprovisedComponents,
122 ],
123 MaterialGroup::Capacitors => vec![
124 Material::GridResistors,
125 Material::HybridCapacitors,
126 Material::ElectrochemicalArrays,
127 Material::PolymerCapacitors,
128 Material::MilitarySupercapacitors,
129 ],
130 MaterialGroup::Shielding => vec![
131 Material::WornShieldEmitters,
132 Material::ShieldEmitters,
133 Material::ShieldingSensors,
134 Material::CompoundShielding,
135 Material::ImperialShielding,
136 ],
137 MaterialGroup::Composite => vec![
138 Material::CompactComposites,
139 Material::FilamentComposites,
140 Material::HighDensityComposites,
141 Material::ProprietaryComposites,
142 Material::CoreDynamicsComposites,
143 ],
144 MaterialGroup::Crystal => vec![
145 Material::CrystalShards,
146 Material::FlawedFocusCrystals,
147 Material::FocusCrystals,
148 Material::RefinedFocusCrystals,
149 Material::ExquisiteFocusCrystals,
150 ],
151 MaterialGroup::Alloys => vec![
152 Material::SalvagedAlloys,
153 Material::GalvanisingAlloys,
154 Material::PhaseAlloys,
155 Material::ProtoLightAlloys,
156 Material::ProtoRadiolicAlloys,
157 ],
158
159 MaterialGroup::EmissionData => vec![
161 Material::ExceptionScrambledEmissionData,
162 Material::IrregularEmissionData,
163 Material::UnexpectedEmissionData,
164 Material::DecodedEmissionData,
165 Material::AbnormalCompactEmissionData,
166 ],
167 MaterialGroup::WakeScans => vec![
168 Material::AtypicalDisruptedWakeEchoes,
169 Material::AnomalousFSDTelemetry,
170 Material::StrangeWakeSolutions,
171 Material::EccentricHyperspaceTrajectories,
172 Material::DataminedWakeExceptions,
173 ],
174 MaterialGroup::ShieldData => vec![
175 Material::DistortedShieldCycleRecordings,
176 Material::InconsistentShieldSoakAnalysis,
177 Material::UntypicalShieldScans,
178 Material::AberrantShieldPatternAnalysis,
179 Material::PeculiarShieldFrequencyData,
180 ],
181 MaterialGroup::EncryptionFiles => vec![
182 Material::UnusualEncryptedFiles,
183 Material::TaggedEncryptionCodes,
184 Material::OpenSymmetricKeys,
185 Material::AtypicalEncryptionArchives,
186 Material::AdaptiveEncryptorsCapture,
187 ],
188 MaterialGroup::DataArchives => vec![
189 Material::AnomalousBulkScanData,
190 Material::UnidentifiedScanArchives,
191 Material::ClassifiedScanDatabanks,
192 Material::DivergentScanData,
193 Material::ClassifiedScanFragment,
194 ],
195 MaterialGroup::EncodedFirmware => vec![
196 Material::SpecializedLegacyFirmware,
197 Material::ModifiedConsumerFirmware,
198 Material::CrackedIndustrialFirmware,
199 Material::SecurityFirmwarePatch,
200 Material::ModifiedEmbeddedFirmware,
201 ],
202 }
203 }
204}
205
206impl Display for MaterialGroup {
207 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
208 write!(
209 f,
210 "{}",
211 match self {
212 MaterialGroup::RawMaterials1 => "Raw Materials 1",
214 MaterialGroup::RawMaterials2 => "Raw Materials 2",
215 MaterialGroup::RawMaterials3 => "Raw Materials 3",
216 MaterialGroup::RawMaterials4 => "Raw Materials 4",
217 MaterialGroup::RawMaterials5 => "Raw Materials 5",
218 MaterialGroup::RawMaterials6 => "Raw Materials 6",
219 MaterialGroup::RawMaterials7 => "Raw Materials 7",
220
221 MaterialGroup::Chemical => "Chemical",
223 MaterialGroup::Thermic => "Thermic",
224 MaterialGroup::Heat => "Heat",
225 MaterialGroup::Conductive => "Conductive",
226 MaterialGroup::MechanicalComponents => "Mechanical Components",
227 MaterialGroup::Capacitors => "Capacitors",
228 MaterialGroup::Shielding => "Shielding",
229 MaterialGroup::Composite => "Composite",
230 MaterialGroup::Crystal => "Crystal",
231 MaterialGroup::Alloys => "Alloys",
232
233 MaterialGroup::EmissionData => "Emission Data",
235 MaterialGroup::WakeScans => "Wake Scans",
236 MaterialGroup::ShieldData => "Shield Data",
237 MaterialGroup::EncryptionFiles => "Encryption Files",
238 MaterialGroup::DataArchives => "Data Archives",
239 MaterialGroup::EncodedFirmware => "Encoded Firmware",
240 }
241 )
242 }
243}