Skip to main content

ed_journals/modules/materials/models/
material_group.rs

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    // Raw
11    RawMaterials1,
12    RawMaterials2,
13    RawMaterials3,
14    RawMaterials4,
15    RawMaterials5,
16    RawMaterials6,
17    RawMaterials7,
18
19    // Manufactured
20    Chemical,
21    Thermic,
22    Heat,
23    Conductive,
24    MechanicalComponents,
25    Capacitors,
26    Shielding,
27    Composite,
28    Crystal,
29    Alloys,
30
31    // Encoded
32    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            // Raw
44            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            // Manufactured
88            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            // Encoded
160            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                // Raw
213                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                // Manufactured
222                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                // Encoded
234                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}