1use serde::Serialize;
2
3use crate::modules::materials::Material;
4
5#[derive(Debug, Serialize)]
6pub enum MaterialGrade {
7 Grade1,
8 Grade2,
9 Grade3,
10 Grade4,
11 Grade5,
12
13 None,
15
16 #[cfg(feature = "allow-unknown")]
17 #[cfg_attr(docsrs, doc(cfg(feature = "allow-unknown")))]
18 Unknown,
19}
20
21impl MaterialGrade {
22 pub fn grade_nr(&self) -> u8 {
23 match self {
24 MaterialGrade::Grade1 => 1,
25 MaterialGrade::Grade2 => 2,
26 MaterialGrade::Grade3 => 3,
27 MaterialGrade::Grade4 => 4,
28 MaterialGrade::Grade5 => 5,
29 MaterialGrade::None => 0,
30
31 #[cfg(feature = "allow-unknown")]
32 MaterialGrade::Unknown => 0,
33 }
34 }
35
36 pub fn grade_storage_limit(&self) -> u16 {
37 match self {
38 MaterialGrade::Grade1 => 300,
39 MaterialGrade::Grade2 => 250,
40 MaterialGrade::Grade3 => 200,
41 MaterialGrade::Grade4 => 150,
42 MaterialGrade::Grade5 => 100,
43 MaterialGrade::None => 0,
44
45 #[cfg(feature = "allow-unknown")]
46 MaterialGrade::Unknown => 250,
47 }
48 }
49}
50
51impl From<&Material> for MaterialGrade {
52 fn from(value: &Material) -> Self {
53 match value {
54 Material::Carbon => MaterialGrade::Grade1,
56 Material::Vanadium => MaterialGrade::Grade2,
57 Material::Niobium => MaterialGrade::Grade3,
58 Material::Yttrium => MaterialGrade::Grade4,
59
60 Material::Phosphorus => MaterialGrade::Grade1,
61 Material::Chromium => MaterialGrade::Grade2,
62 Material::Molybdenum => MaterialGrade::Grade3,
63 Material::Technetium => MaterialGrade::Grade4,
64
65 Material::Sulphur => MaterialGrade::Grade1,
66 Material::Manganese => MaterialGrade::Grade2,
67 Material::Cadmium => MaterialGrade::Grade3,
68 Material::Ruthenium => MaterialGrade::Grade4,
69
70 Material::Iron => MaterialGrade::Grade1,
71 Material::Zinc => MaterialGrade::Grade2,
72 Material::Tin => MaterialGrade::Grade3,
73 Material::Selenium => MaterialGrade::Grade4,
74
75 Material::Nickel => MaterialGrade::Grade1,
76 Material::Germanium => MaterialGrade::Grade2,
77 Material::Tungsten => MaterialGrade::Grade3,
78 Material::Tellurium => MaterialGrade::Grade4,
79
80 Material::Rhenium => MaterialGrade::Grade1,
81 Material::Arsenic => MaterialGrade::Grade2,
82 Material::Mercury => MaterialGrade::Grade3,
83 Material::Polonium => MaterialGrade::Grade4,
84
85 Material::Lead => MaterialGrade::Grade1,
86 Material::Zirconium => MaterialGrade::Grade2,
87 Material::Boron => MaterialGrade::Grade3,
88 Material::Antimony => MaterialGrade::Grade4,
89
90 Material::ChemicalStorageUnits => MaterialGrade::Grade1,
92 Material::ChemicalProcessors => MaterialGrade::Grade2,
93 Material::ChemicalDistillery => MaterialGrade::Grade3,
94 Material::ChemicalManipulators => MaterialGrade::Grade4,
95 Material::PharmaceuticalIsolators => MaterialGrade::Grade5,
96
97 Material::TemperedAlloys => MaterialGrade::Grade1,
98 Material::HeatResistantCeramics => MaterialGrade::Grade2,
99 Material::PrecipitatedAlloys => MaterialGrade::Grade3,
100 Material::ThermicAlloys => MaterialGrade::Grade4,
101 Material::MilitaryGradeAlloys => MaterialGrade::Grade5,
102
103 Material::HeatConductionWiring => MaterialGrade::Grade1,
104 Material::HeatDispersionPlate => MaterialGrade::Grade2,
105 Material::HeatExchangers => MaterialGrade::Grade3,
106 Material::HeatVanes => MaterialGrade::Grade4,
107 Material::ProtoHeatRadiators => MaterialGrade::Grade5,
108
109 Material::BasicConductors => MaterialGrade::Grade1,
110 Material::ConductiveComponents => MaterialGrade::Grade2,
111 Material::ConductiveCeramics => MaterialGrade::Grade3,
112 Material::ConductivePolymers => MaterialGrade::Grade4,
113 Material::BiotechConductors => MaterialGrade::Grade5,
114
115 Material::MechanicalScrap => MaterialGrade::Grade1,
116 Material::MechanicalEquipment => MaterialGrade::Grade2,
117 Material::MechanicalComponents => MaterialGrade::Grade3,
118 Material::ConfigurableComponents => MaterialGrade::Grade4,
119 Material::ImprovisedComponents => MaterialGrade::Grade5,
120
121 Material::GridResistors => MaterialGrade::Grade1,
122 Material::HybridCapacitors => MaterialGrade::Grade2,
123 Material::ElectrochemicalArrays => MaterialGrade::Grade3,
124 Material::PolymerCapacitors => MaterialGrade::Grade4,
125 Material::MilitarySupercapacitors => MaterialGrade::Grade5,
126
127 Material::WornShieldEmitters => MaterialGrade::Grade1,
128 Material::ShieldEmitters => MaterialGrade::Grade2,
129 Material::ShieldingSensors => MaterialGrade::Grade3,
130 Material::CompoundShielding => MaterialGrade::Grade4,
131 Material::ImperialShielding => MaterialGrade::Grade5,
132
133 Material::CompactComposites => MaterialGrade::Grade1,
134 Material::FilamentComposites => MaterialGrade::Grade2,
135 Material::HighDensityComposites => MaterialGrade::Grade3,
136 Material::ProprietaryComposites => MaterialGrade::Grade4,
137 Material::CoreDynamicsComposites => MaterialGrade::Grade5,
138
139 Material::CrystalShards => MaterialGrade::Grade1,
140 Material::FlawedFocusCrystals => MaterialGrade::Grade2,
141 Material::FocusCrystals => MaterialGrade::Grade3,
142 Material::RefinedFocusCrystals => MaterialGrade::Grade4,
143 Material::ExquisiteFocusCrystals => MaterialGrade::Grade5,
144
145 Material::SalvagedAlloys => MaterialGrade::Grade1,
146 Material::GalvanisingAlloys => MaterialGrade::Grade2,
147 Material::PhaseAlloys => MaterialGrade::Grade3,
148 Material::ProtoLightAlloys => MaterialGrade::Grade4,
149 Material::ProtoRadiolicAlloys => MaterialGrade::Grade5,
150
151 Material::HardenedSurfaceFragments => MaterialGrade::Grade1,
152 Material::CausticShard => MaterialGrade::Grade2,
153 Material::TacticalCoreChip => MaterialGrade::Grade2,
154 Material::ThargoidCarapace => MaterialGrade::Grade2,
155 Material::BioMechanicalConduits => MaterialGrade::Grade3,
156 Material::CorrosiveMechanisms => MaterialGrade::Grade3,
157 Material::PhasingMembraneResidue => MaterialGrade::Grade3,
158 Material::ThargoidEnergyCell => MaterialGrade::Grade3,
159 Material::WreckageComponents => MaterialGrade::Grade3,
160 Material::CausticCrystal => MaterialGrade::Grade4,
161 Material::ThargoidTechnologicalComponents => MaterialGrade::Grade4,
162 Material::WeaponParts => MaterialGrade::Grade4,
163 Material::HeatExposureSpecimen => MaterialGrade::Grade5,
164 Material::PropulsionElements => MaterialGrade::Grade5,
165 Material::SensorFragment => MaterialGrade::Grade5,
166 Material::ThargoidOrganicCircuitry => MaterialGrade::Grade5,
167
168 Material::GuardianPowerCell => MaterialGrade::Grade1,
169 Material::GuardianWreckageComponents => MaterialGrade::Grade1,
170 Material::GuardianPowerConduit => MaterialGrade::Grade2,
171 Material::GuardianSentinelWeaponParts => MaterialGrade::Grade3,
172 Material::GuardianTechnologyComponent => MaterialGrade::Grade3,
173
174 Material::ExceptionScrambledEmissionData => MaterialGrade::Grade1,
176 Material::IrregularEmissionData => MaterialGrade::Grade2,
177 Material::UnexpectedEmissionData => MaterialGrade::Grade3,
178 Material::DecodedEmissionData => MaterialGrade::Grade4,
179 Material::AbnormalCompactEmissionData => MaterialGrade::Grade5,
180
181 Material::AtypicalDisruptedWakeEchoes => MaterialGrade::Grade1,
182 Material::AnomalousFSDTelemetry => MaterialGrade::Grade2,
183 Material::StrangeWakeSolutions => MaterialGrade::Grade3,
184 Material::EccentricHyperspaceTrajectories => MaterialGrade::Grade4,
185 Material::DataminedWakeExceptions => MaterialGrade::Grade5,
186
187 Material::DistortedShieldCycleRecordings => MaterialGrade::Grade1,
188 Material::InconsistentShieldSoakAnalysis => MaterialGrade::Grade2,
189 Material::UntypicalShieldScans => MaterialGrade::Grade3,
190 Material::AberrantShieldPatternAnalysis => MaterialGrade::Grade4,
191 Material::PeculiarShieldFrequencyData => MaterialGrade::Grade5,
192
193 Material::UnusualEncryptedFiles => MaterialGrade::Grade1,
194 Material::TaggedEncryptionCodes => MaterialGrade::Grade2,
195 Material::OpenSymmetricKeys => MaterialGrade::Grade3,
196 Material::AtypicalEncryptionArchives => MaterialGrade::Grade4,
197 Material::AdaptiveEncryptorsCapture => MaterialGrade::Grade5,
198
199 Material::AnomalousBulkScanData => MaterialGrade::Grade1,
200 Material::UnidentifiedScanArchives => MaterialGrade::Grade2,
201 Material::ClassifiedScanDatabanks => MaterialGrade::Grade3,
202 Material::DivergentScanData => MaterialGrade::Grade4,
203 Material::ClassifiedScanFragment => MaterialGrade::Grade5,
204
205 Material::SpecializedLegacyFirmware => MaterialGrade::Grade1,
206 Material::ModifiedConsumerFirmware => MaterialGrade::Grade2,
207 Material::CrackedIndustrialFirmware => MaterialGrade::Grade3,
208 Material::SecurityFirmwarePatch => MaterialGrade::Grade4,
209 Material::ModifiedEmbeddedFirmware => MaterialGrade::Grade5,
210
211 Material::ThargoidStructuralData => MaterialGrade::Grade2,
212 Material::MassiveEnergySurgeAnalytics => MaterialGrade::Grade3,
213 Material::ShipFlightData => MaterialGrade::Grade3,
214 Material::ShipSystemsData => MaterialGrade::Grade3,
215 Material::ThargoidInterdictionTelemetry => MaterialGrade::Grade3,
216 Material::ThargoidMaterialCompositionData => MaterialGrade::Grade3,
217 Material::ThargoidShipSignature => MaterialGrade::Grade3,
218 Material::ThargoidResidueData => MaterialGrade::Grade4,
219 Material::ThargoidWakeData => MaterialGrade::Grade4,
220
221 Material::PatternGammaObeliskData => MaterialGrade::Grade1,
222 Material::PatternBetaObeliskData => MaterialGrade::Grade2,
223 Material::PatternAlphaObeliskData => MaterialGrade::Grade3,
224 Material::PatternDeltaObeliskData => MaterialGrade::Grade4,
225 Material::PatternEpsilonObeliskData => MaterialGrade::Grade4,
226 Material::GuardianModuleBlueprintFragment => MaterialGrade::Grade5,
227 Material::GuardianVesselBlueprintFragment => MaterialGrade::Grade5,
228 Material::GuardianWeaponBlueprintFragment => MaterialGrade::Grade5,
229
230 #[cfg(feature = "allow-unknown")]
231 Material::Unknown(_) => MaterialGrade::Unknown,
232 }
233 }
234}