Skip to main content

ed_journals/modules/materials/models/
material.rs

1use std::fmt::{Display, Formatter};
2use std::str::FromStr;
3
4use serde::Serialize;
5use thiserror::Error;
6
7use crate::from_str_deserialize_impl;
8use crate::materials::MaterialGrade;
9use crate::modules::materials::MaterialCategory;
10
11#[derive(Debug, Serialize, Clone, PartialEq, Eq, Hash)]
12#[cfg_attr(not(feature = "allow-unknown"), non_exhaustive)]
13pub enum Material {
14    // Raw
15    Antimony,
16    Arsenic,
17    Boron,
18    Cadmium,
19    Carbon,
20    Chromium,
21    Germanium,
22    Iron,
23    Lead,
24    Manganese,
25    Mercury,
26    Molybdenum,
27    Nickel,
28    Niobium,
29    Phosphorus,
30    Polonium,
31    Rhenium,
32    Ruthenium,
33    Selenium,
34    Sulphur,
35    Technetium,
36    Tellurium,
37    Tin,
38    Tungsten,
39    Vanadium,
40    Yttrium,
41    Zinc,
42    Zirconium,
43
44    // Manufactured
45    BasicConductors,
46    BioMechanicalConduits,
47    BiotechConductors,
48    CausticCrystal,
49    CausticShard,
50    ChemicalDistillery,
51    ChemicalManipulators,
52    ChemicalProcessors,
53    ChemicalStorageUnits,
54    CompactComposites,
55    CompoundShielding,
56    ConductiveCeramics,
57    ConductiveComponents,
58    ConductivePolymers,
59    ConfigurableComponents,
60    CoreDynamicsComposites,
61    CorrosiveMechanisms,
62    CrystalShards,
63    ElectrochemicalArrays,
64    ExquisiteFocusCrystals,
65    FilamentComposites,
66    FlawedFocusCrystals,
67    FocusCrystals,
68    GalvanisingAlloys,
69    GridResistors,
70    GuardianPowerCell,
71    GuardianPowerConduit,
72    GuardianSentinelWeaponParts,
73    GuardianTechnologyComponent,
74    GuardianWreckageComponents,
75    HardenedSurfaceFragments,
76    HeatConductionWiring,
77    HeatDispersionPlate,
78    HeatExchangers,
79    HeatExposureSpecimen,
80    HeatResistantCeramics,
81    HeatVanes,
82    HighDensityComposites,
83    HybridCapacitors,
84    ImperialShielding,
85    ImprovisedComponents,
86    MechanicalComponents,
87    MechanicalEquipment,
88    MechanicalScrap,
89    MilitaryGradeAlloys,
90    MilitarySupercapacitors,
91    PharmaceuticalIsolators,
92    PhaseAlloys,
93    PhasingMembraneResidue,
94    PolymerCapacitors,
95    PrecipitatedAlloys,
96    ProprietaryComposites,
97    PropulsionElements,
98    ProtoHeatRadiators,
99    ProtoLightAlloys,
100    ProtoRadiolicAlloys,
101    RefinedFocusCrystals,
102    SalvagedAlloys,
103    SensorFragment,
104    ShieldEmitters,
105    ShieldingSensors,
106    TacticalCoreChip,
107    TemperedAlloys,
108    ThargoidCarapace,
109    ThargoidEnergyCell,
110    ThargoidOrganicCircuitry,
111    ThargoidTechnologicalComponents,
112    ThermicAlloys,
113    WeaponParts,
114    WornShieldEmitters,
115    WreckageComponents,
116
117    // Encoded
118    AberrantShieldPatternAnalysis,
119    AbnormalCompactEmissionData,
120    AdaptiveEncryptorsCapture,
121    AnomalousBulkScanData,
122    AnomalousFSDTelemetry,
123    AtypicalDisruptedWakeEchoes,
124    AtypicalEncryptionArchives,
125    ClassifiedScanDatabanks,
126    ClassifiedScanFragment,
127    CrackedIndustrialFirmware,
128    DataminedWakeExceptions,
129    DecodedEmissionData,
130    DistortedShieldCycleRecordings,
131    DivergentScanData,
132    EccentricHyperspaceTrajectories,
133    ExceptionScrambledEmissionData,
134    GuardianModuleBlueprintFragment,
135    GuardianVesselBlueprintFragment,
136    GuardianWeaponBlueprintFragment,
137    InconsistentShieldSoakAnalysis,
138    IrregularEmissionData,
139    MassiveEnergySurgeAnalytics,
140    ModifiedConsumerFirmware,
141    ModifiedEmbeddedFirmware,
142    OpenSymmetricKeys,
143    PatternAlphaObeliskData,
144    PatternBetaObeliskData,
145    PatternDeltaObeliskData,
146    PatternEpsilonObeliskData,
147    PatternGammaObeliskData,
148    PeculiarShieldFrequencyData,
149    SecurityFirmwarePatch,
150    ShipFlightData,
151    ShipSystemsData,
152    SpecializedLegacyFirmware,
153    StrangeWakeSolutions,
154    TaggedEncryptionCodes,
155    ThargoidInterdictionTelemetry,
156    ThargoidMaterialCompositionData,
157    ThargoidResidueData,
158    ThargoidShipSignature,
159    ThargoidStructuralData,
160    ThargoidWakeData,
161    UnexpectedEmissionData,
162    UnidentifiedScanArchives,
163    UntypicalShieldScans,
164    UnusualEncryptedFiles,
165
166    #[cfg(feature = "allow-unknown")]
167    #[cfg_attr(docsrs, doc(cfg(feature = "allow-unknown")))]
168    Unknown(String),
169}
170
171impl Material {
172    pub fn is_raw(&self) -> bool {
173        matches!(self.into(), MaterialCategory::Raw)
174    }
175
176    pub fn is_manufactured(&self) -> bool {
177        matches!(self.into(), MaterialCategory::Manufactured)
178    }
179
180    pub fn is_encoded(&self) -> bool {
181        matches!(self.into(), MaterialCategory::Encoded)
182    }
183
184    pub fn id(&self) -> u64 {
185        match self {
186            Material::Iron => 128672318,
187            Material::Nickel => 128672319,
188            Material::Tin => 128672320,
189            Material::Zinc => 128672321,
190            Material::Carbon => 128672322,
191            Material::Sulphur => 128672323,
192            Material::Phosphorus => 128672324,
193            Material::Manganese => 128672325,
194            Material::Selenium => 128672326,
195            Material::Chromium => 128672327,
196            Material::Vanadium => 128672328,
197            Material::Germanium => 128672329,
198            Material::Cadmium => 128672330,
199            Material::Tungsten => 128672331,
200            Material::Arsenic => 128672332,
201            Material::Molybdenum => 128672333,
202            Material::Niobium => 128672334,
203            Material::Zirconium => 128672335,
204            Material::Mercury => 128672336,
205            Material::Yttrium => 128672337,
206            Material::Tellurium => 128672338,
207            Material::Polonium => 128672339,
208            Material::Technetium => 128672340,
209            Material::Ruthenium => 128672341,
210            Material::Antimony => 128672342,
211            Material::GridResistors => 128673877,
212            Material::CrystalShards => 128673878,
213            Material::TemperedAlloys => 128673879,
214            Material::BasicConductors => 128673880,
215            Material::MechanicalScrap => 128673881,
216            Material::HeatConductionWiring => 128673882,
217            Material::WornShieldEmitters => 128673883,
218            Material::CompactComposites => 128673884,
219            Material::SalvagedAlloys => 128673885,
220            Material::ChemicalStorageUnits => 128673886,
221            Material::HybridCapacitors => 128673887,
222            Material::FlawedFocusCrystals => 128673888,
223            Material::HeatResistantCeramics => 128673889,
224            Material::ConductiveComponents => 128673890,
225            Material::MechanicalEquipment => 128673891,
226            Material::HeatDispersionPlate => 128673892,
227            Material::ShieldEmitters => 128673893,
228            Material::FilamentComposites => 128673894,
229            Material::GalvanisingAlloys => 128673895,
230            Material::ChemicalProcessors => 128673896,
231            Material::ElectrochemicalArrays => 128673897,
232            Material::FocusCrystals => 128673898,
233            Material::PrecipitatedAlloys => 128673899,
234            Material::ConductiveCeramics => 128673900,
235            Material::MechanicalComponents => 128673901,
236            Material::HeatExchangers => 128673902,
237            Material::ShieldingSensors => 128673903,
238            Material::HighDensityComposites => 128673904,
239            Material::PhaseAlloys => 128673905,
240            Material::ChemicalDistillery => 128673906,
241            Material::PolymerCapacitors => 128673907,
242            Material::RefinedFocusCrystals => 128673908,
243            Material::ThermicAlloys => 128673909,
244            Material::ConductivePolymers => 128673910,
245            Material::ConfigurableComponents => 128673911,
246            Material::HeatVanes => 128673912,
247            Material::CompoundShielding => 128673913,
248            Material::ProprietaryComposites => 128673914,
249            Material::ProtoLightAlloys => 128673915,
250            Material::ChemicalManipulators => 128673916,
251            Material::MilitarySupercapacitors => 128673917,
252            Material::ExquisiteFocusCrystals => 128673918,
253            Material::MilitaryGradeAlloys => 128673919,
254            Material::BiotechConductors => 128673920,
255            Material::ImprovisedComponents => 128673921,
256            Material::ProtoHeatRadiators => 128673922,
257            Material::ImperialShielding => 128673923,
258            Material::CoreDynamicsComposites => 128673924,
259            Material::ProtoRadiolicAlloys => 128673925,
260            Material::PharmaceuticalIsolators => 128673926,
261            Material::SpecializedLegacyFirmware => 128681610,
262            Material::UnusualEncryptedFiles => 128681611,
263            Material::AnomalousBulkScanData => 128681612,
264            Material::AtypicalDisruptedWakeEchoes => 128681613,
265            Material::ExceptionScrambledEmissionData => 128681614,
266            Material::DistortedShieldCycleRecordings => 128681615,
267            Material::ModifiedConsumerFirmware => 128681616,
268            Material::TaggedEncryptionCodes => 128681617,
269            Material::UnidentifiedScanArchives => 128681618,
270            Material::AnomalousFSDTelemetry => 128681619,
271            Material::IrregularEmissionData => 128681620,
272            Material::InconsistentShieldSoakAnalysis => 128681621,
273            Material::CrackedIndustrialFirmware => 128681622,
274            Material::OpenSymmetricKeys => 128681623,
275            Material::ClassifiedScanDatabanks => 128681624,
276            Material::StrangeWakeSolutions => 128681625,
277            Material::UnexpectedEmissionData => 128681626,
278            Material::UntypicalShieldScans => 128681627,
279            Material::SecurityFirmwarePatch => 128681628,
280            Material::AtypicalEncryptionArchives => 128681629,
281            Material::DivergentScanData => 128681630,
282            Material::EccentricHyperspaceTrajectories => 128681631,
283            Material::DecodedEmissionData => 128681632,
284            Material::AberrantShieldPatternAnalysis => 128681633,
285            Material::ModifiedEmbeddedFirmware => 128681634,
286            Material::AdaptiveEncryptorsCapture => 128681635,
287            Material::ClassifiedScanFragment => 128681636,
288            Material::DataminedWakeExceptions => 128681637,
289            Material::AbnormalCompactEmissionData => 128681638,
290            Material::PeculiarShieldFrequencyData => 128681639,
291            Material::SensorFragment => 128681640,
292            Material::ThargoidShipSignature => 128731669,
293            Material::ThargoidWakeData => 128731670,
294            Material::PatternDeltaObeliskData => 128732197,
295            Material::PatternAlphaObeliskData => 128732198,
296            Material::PatternBetaObeliskData => 128732199,
297            Material::PatternGammaObeliskData => 128732200,
298            Material::PatternEpsilonObeliskData => 128732201,
299            Material::ThargoidMaterialCompositionData => 128737280,
300            Material::ThargoidResidueData => 128737281,
301            Material::ThargoidStructuralData => 128737282,
302            Material::ThargoidCarapace => 128737283,
303            Material::ThargoidEnergyCell => 128737284,
304            Material::ThargoidOrganicCircuitry => 128737285,
305            Material::ThargoidTechnologicalComponents => 128737286,
306            Material::BioMechanicalConduits => 128737287,
307            Material::PropulsionElements => 128793132,
308            Material::WeaponParts => 128793133,
309            Material::WreckageComponents => 128793134,
310            Material::ShipFlightData => 128793135,
311            Material::ShipSystemsData => 128793136,
312            Material::GuardianPowerCell => 128815023,
313            Material::GuardianPowerConduit => 128815024,
314            Material::GuardianTechnologyComponent => 128815025,
315            Material::GuardianSentinelWeaponParts => 128815026,
316            Material::GuardianWreckageComponents => 128815027,
317            Material::GuardianWeaponBlueprintFragment => 128815028,
318            Material::GuardianModuleBlueprintFragment => 128815029,
319            Material::GuardianVesselBlueprintFragment => 128815030,
320            Material::Rhenium => 128837857,
321            Material::Lead => 128850245,
322            Material::Boron => 128850246,
323
324            // TODO these need values
325            Material::CausticCrystal => 0,
326            Material::CausticShard => 0,
327            Material::CorrosiveMechanisms => 0,
328            Material::HardenedSurfaceFragments => 0,
329            Material::HeatExposureSpecimen => 0,
330            Material::PhasingMembraneResidue => 0,
331            Material::TacticalCoreChip => 0,
332            Material::MassiveEnergySurgeAnalytics => 0,
333            Material::ThargoidInterdictionTelemetry => 0,
334
335            #[cfg(feature = "allow-unknown")]
336            Material::Unknown(_) => 0,
337        }
338    }
339
340    pub fn grade(&self) -> MaterialGrade {
341        self.into()
342    }
343}
344
345#[derive(Debug, Error)]
346pub enum MaterialError {
347    #[error("Unknown material: '{0}'")]
348    UnknownMaterial(String),
349}
350
351impl FromStr for Material {
352    type Err = MaterialError;
353
354    fn from_str(s: &str) -> Result<Self, Self::Err> {
355        let string: &str = &s.to_ascii_lowercase();
356
357        Ok(match string {
358            "carbon" => Material::Carbon,
359            "vanadium" => Material::Vanadium,
360            "niobium" => Material::Niobium,
361            "yttrium" => Material::Yttrium,
362            "phosphorus" => Material::Phosphorus,
363            "chromium" => Material::Chromium,
364            "molybdenum" => Material::Molybdenum,
365            "technetium" => Material::Technetium,
366            "sulphur" => Material::Sulphur,
367            "manganese" => Material::Manganese,
368            "cadmium" => Material::Cadmium,
369            "ruthenium" => Material::Ruthenium,
370            "iron" => Material::Iron,
371            "zinc" => Material::Zinc,
372            "tin" => Material::Tin,
373            "selenium" => Material::Selenium,
374            "nickel" => Material::Nickel,
375            "germanium" => Material::Germanium,
376            "tungsten" => Material::Tungsten,
377            "tellurium" => Material::Tellurium,
378            "rhenium" => Material::Rhenium,
379            "arsenic" => Material::Arsenic,
380            "mercury" => Material::Mercury,
381            "polonium" => Material::Polonium,
382            "lead" => Material::Lead,
383            "zirconium" => Material::Zirconium,
384            "boron" => Material::Boron,
385            "antimony" => Material::Antimony,
386            "chemicalstorageunits" => Material::ChemicalStorageUnits,
387            "chemicalprocessors" => Material::ChemicalProcessors,
388            "chemicaldistillery" => Material::ChemicalDistillery,
389            "chemicalmanipulators" => Material::ChemicalManipulators,
390            "pharmaceuticalisolators" => Material::PharmaceuticalIsolators,
391            "temperedalloys" => Material::TemperedAlloys,
392            "heatresistantceramics" => Material::HeatResistantCeramics,
393            "precipitatedalloys" => Material::PrecipitatedAlloys,
394            "thermicalloys" => Material::ThermicAlloys,
395            "militarygradealloys" => Material::MilitaryGradeAlloys,
396            "heatconductionwiring" => Material::HeatConductionWiring,
397            "heatdispersionplate" => Material::HeatDispersionPlate,
398            "heatexchangers" => Material::HeatExchangers,
399            "heatvanes" => Material::HeatVanes,
400            "protoheatradiators" => Material::ProtoHeatRadiators,
401            "basicconductors" => Material::BasicConductors,
402            "conductivecomponents" => Material::ConductiveComponents,
403            "conductiveceramics" => Material::ConductiveCeramics,
404            "conductivepolymers" => Material::ConductivePolymers,
405            "biotechconductors" => Material::BiotechConductors,
406            "mechanicalscrap" => Material::MechanicalScrap,
407            "mechanicalequipment" => Material::MechanicalEquipment,
408            "mechanicalcomponents" => Material::MechanicalComponents,
409            "configurablecomponents" => Material::ConfigurableComponents,
410            "improvisedcomponents" => Material::ImprovisedComponents,
411            "gridresistors" => Material::GridResistors,
412            "hybridcapacitors" => Material::HybridCapacitors,
413            "electrochemicalarrays" => Material::ElectrochemicalArrays,
414            "polymercapacitors" => Material::PolymerCapacitors,
415            "militarysupercapacitors" => Material::MilitarySupercapacitors,
416            "wornshieldemitters" => Material::WornShieldEmitters,
417            "shieldemitters" => Material::ShieldEmitters,
418            "shieldingsensors" => Material::ShieldingSensors,
419            "compoundshielding" => Material::CompoundShielding,
420            "imperialshielding" => Material::ImperialShielding,
421            "compactcomposites" => Material::CompactComposites,
422            "filamentcomposites" => Material::FilamentComposites,
423            "highdensitycomposites" => Material::HighDensityComposites,
424            "fedproprietarycomposites" => Material::ProprietaryComposites,
425            "fedcorecomposites" => Material::CoreDynamicsComposites,
426            "crystalshards" => Material::CrystalShards,
427            "uncutfocuscrystals" => Material::FlawedFocusCrystals,
428            "focuscrystals" => Material::FocusCrystals,
429            "refinedfocuscrystals" => Material::RefinedFocusCrystals,
430            "exquisitefocuscrystals" => Material::ExquisiteFocusCrystals,
431            "salvagedalloys" => Material::SalvagedAlloys,
432            "galvanisingalloys" => Material::GalvanisingAlloys,
433            "phasealloys" => Material::PhaseAlloys,
434            "protolightalloys" => Material::ProtoLightAlloys,
435            "protoradiolicalloys" => Material::ProtoRadiolicAlloys,
436            "hardenedsurfacefragments" => Material::HardenedSurfaceFragments,
437            "tg_causticshard" => Material::CausticShard,
438            "tacticalcorechip" => Material::TacticalCoreChip,
439            "unknowncarapace" => Material::ThargoidCarapace,
440            "tg_biomechanicalconduits" => Material::BioMechanicalConduits,
441            "tg_causticgeneratorparts" => Material::CorrosiveMechanisms,
442            "phasingmembraneresidue" => Material::PhasingMembraneResidue,
443            "thargoidenergycell" => Material::ThargoidEnergyCell,
444            "tg_wreckagecomponents" => Material::WreckageComponents,
445            "tg_causticcrystal" => Material::CausticCrystal,
446            "thargoidtechnologicalcomponents" => Material::ThargoidTechnologicalComponents,
447            "tg_weaponparts" => Material::WeaponParts,
448            "heatexposurespecimen" => Material::HeatExposureSpecimen,
449            "tg_propulsionelement" => Material::PropulsionElements,
450            "unknownenergysource" => Material::SensorFragment,
451            "thargoidorganiccircuitry" => Material::ThargoidOrganicCircuitry,
452            "unknownorganiccircuitry" => Material::ThargoidOrganicCircuitry,
453            "guardian_powercell" => Material::GuardianPowerCell,
454            "guardian_sentinel_wreckagecomponents" => Material::GuardianWreckageComponents,
455            "guardian_powerconduit" => Material::GuardianPowerConduit,
456            "guardian_sentinel_weaponparts" => Material::GuardianSentinelWeaponParts,
457            "guardian_techcomponent" => Material::GuardianTechnologyComponent,
458            "scrambledemissiondata" => Material::ExceptionScrambledEmissionData,
459            "archivedemissiondata" => Material::IrregularEmissionData,
460            "emissiondata" => Material::UnexpectedEmissionData,
461            "decodedemissiondata" => Material::DecodedEmissionData,
462            "compactemissionsdata" => Material::AbnormalCompactEmissionData,
463            "disruptedwakeechoes" => Material::AtypicalDisruptedWakeEchoes,
464            "fsdtelemetry" => Material::AnomalousFSDTelemetry,
465            "wakesolutions" => Material::StrangeWakeSolutions,
466            "hyperspacetrajectories" => Material::EccentricHyperspaceTrajectories,
467            "dataminedwake" => Material::DataminedWakeExceptions,
468            "shieldcyclerecordings" => Material::DistortedShieldCycleRecordings,
469            "shieldsoakanalysis" => Material::InconsistentShieldSoakAnalysis,
470            "shielddensityreports" => Material::UntypicalShieldScans,
471            "shieldpatternanalysis" => Material::AberrantShieldPatternAnalysis,
472            "shieldfrequencydata" => Material::PeculiarShieldFrequencyData,
473            "encryptedfiles" => Material::UnusualEncryptedFiles,
474            "encryptioncodes" => Material::TaggedEncryptionCodes,
475            "symmetrickeys" => Material::OpenSymmetricKeys,
476            "encryptionarchives" => Material::AtypicalEncryptionArchives,
477            "adaptiveencryptors" => Material::AdaptiveEncryptorsCapture,
478            "bulkscandata" => Material::AnomalousBulkScanData,
479            "scanarchives" => Material::UnidentifiedScanArchives,
480            "scandatabanks" => Material::ClassifiedScanDatabanks,
481            "encodedscandata" => Material::DivergentScanData,
482            "classifiedscandata" => Material::ClassifiedScanFragment,
483            "legacyfirmware" => Material::SpecializedLegacyFirmware,
484            "consumerfirmware" => Material::ModifiedConsumerFirmware,
485            "industrialfirmware" => Material::CrackedIndustrialFirmware,
486            "securityfirmware" => Material::SecurityFirmwarePatch,
487            "embeddedfirmware" => Material::ModifiedEmbeddedFirmware,
488            "tg_structuraldata" => Material::ThargoidStructuralData,
489            "tg_shutdowndata" => Material::MassiveEnergySurgeAnalytics,
490            "tg_shipflightdata" => Material::ShipFlightData,
491            "tg_shipsystemsdata" => Material::ShipSystemsData,
492            "tg_interdictiondata" => Material::ThargoidInterdictionTelemetry,
493            "tg_compositiondata" => Material::ThargoidMaterialCompositionData,
494            "unknownshipsignature" => Material::ThargoidShipSignature,
495            "tg_residuedata" => Material::ThargoidResidueData,
496            "unknownwakedata" => Material::ThargoidWakeData,
497            "ancienthistoricaldata" => Material::PatternGammaObeliskData,
498            "ancientculturaldata" => Material::PatternBetaObeliskData,
499            "ancientbiologicaldata" => Material::PatternAlphaObeliskData,
500            "ancientlanguagedata" => Material::PatternDeltaObeliskData,
501            "ancienttechnologicaldata" => Material::PatternEpsilonObeliskData,
502            "guardian_moduleblueprint" => Material::GuardianModuleBlueprintFragment,
503            "guardian_vesselblueprint" => Material::GuardianVesselBlueprintFragment,
504            "guardian_weaponblueprint" => Material::GuardianWeaponBlueprintFragment,
505
506            #[cfg(feature = "allow-unknown")]
507            _ => Material::Unknown(s.to_string()),
508
509            #[cfg(not(feature = "allow-unknown"))]
510            _ => return Err(MaterialError::UnknownMaterial(s.to_string())),
511        })
512    }
513}
514
515from_str_deserialize_impl!(Material);
516
517impl Display for Material {
518    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
519        write!(
520            f,
521            "{}",
522            match self {
523                // Raw
524                Material::Antimony => "Antimony",
525                Material::Arsenic => "Arsenic",
526                Material::Boron => "Boron",
527                Material::Cadmium => "Cadmium",
528                Material::Carbon => "Carbon",
529                Material::Chromium => "Chromium",
530                Material::Germanium => "Germanium",
531                Material::Iron => "Iron",
532                Material::Lead => "Lead",
533                Material::Manganese => "Manganese",
534                Material::Mercury => "Mercury",
535                Material::Molybdenum => "Molybdenum",
536                Material::Nickel => "Nickel",
537                Material::Niobium => "Niobium",
538                Material::Phosphorus => "Phosphorus",
539                Material::Polonium => "Polonium",
540                Material::Rhenium => "Rhenium",
541                Material::Ruthenium => "Ruthenium",
542                Material::Selenium => "Selenium",
543                Material::Sulphur => "Sulphur",
544                Material::Technetium => "Technetium",
545                Material::Tellurium => "Tellurium",
546                Material::Tin => "Tin",
547                Material::Tungsten => "Tungsten",
548                Material::Vanadium => "Vanadium",
549                Material::Yttrium => "Yttrium",
550                Material::Zinc => "Zinc",
551                Material::Zirconium => "Zirconium",
552
553                // Manufactured
554                Material::BasicConductors => "Basic Conductors",
555                Material::BioMechanicalConduits => "Bio-Mechanical Conduits",
556                Material::BiotechConductors => "Biotech Conductors",
557                Material::CausticCrystal => "Caustic Crystal",
558                Material::CausticShard => "Caustic Shard",
559                Material::ChemicalDistillery => "Chemical Distillery",
560                Material::ChemicalManipulators => "Chemical Manipulators",
561                Material::ChemicalProcessors => "Chemical Processors",
562                Material::ChemicalStorageUnits => "Chemical Storage Units",
563                Material::CompactComposites => "Compact Composites",
564                Material::CompoundShielding => "Compound Shielding",
565                Material::ConductiveCeramics => "Conductive Ceramics",
566                Material::ConductiveComponents => "Conductive Components",
567                Material::ConductivePolymers => "Conductive Polymers",
568                Material::ConfigurableComponents => "Configurable Components",
569                Material::CoreDynamicsComposites => "Core Dynamics Composites",
570                Material::CorrosiveMechanisms => "Corrosive Mechanisms",
571                Material::CrystalShards => "Crystal Shards",
572                Material::ElectrochemicalArrays => "Electrochemical Arrays",
573                Material::ExquisiteFocusCrystals => "Exquisite Focus Crystals",
574                Material::FilamentComposites => "Filament Composites",
575                Material::FlawedFocusCrystals => "Flawed Focus Crystals",
576                Material::FocusCrystals => "Focus Crystals",
577                Material::GalvanisingAlloys => "Galvanising Alloys",
578                Material::GridResistors => "Grid Resistors",
579                Material::GuardianPowerCell => "Guardian Power Cell",
580                Material::GuardianPowerConduit => "Guardian Power Conduit",
581                Material::GuardianSentinelWeaponParts => "Guardian Sentinel Weapon Parts",
582                Material::GuardianTechnologyComponent => "Guardian Technology Component",
583                Material::GuardianWreckageComponents => "Guardian Wreckage Components",
584                Material::HardenedSurfaceFragments => "Hardened Surface Fragments",
585                Material::HeatConductionWiring => "Heat Conduction Wiring",
586                Material::HeatDispersionPlate => "Heat Dispersion Plate",
587                Material::HeatExchangers => "Heat Exchangers",
588                Material::HeatExposureSpecimen => "Heat Exposure Specimen",
589                Material::HeatResistantCeramics => "Heat Resistant Ceramics",
590                Material::HeatVanes => "Heat Vanes",
591                Material::HighDensityComposites => "High Density Composites",
592                Material::HybridCapacitors => "Hybrid Capacitors",
593                Material::ImperialShielding => "Imperial Shielding",
594                Material::ImprovisedComponents => "Improvised Components",
595                Material::MechanicalComponents => "Mechanical Components",
596                Material::MechanicalEquipment => "Mechanical Equipment",
597                Material::MechanicalScrap => "Mechanical Scrap",
598                Material::MilitaryGradeAlloys => "Military Grade Alloys",
599                Material::MilitarySupercapacitors => "Military Supercapacitors",
600                Material::PharmaceuticalIsolators => "Pharmaceutical Isolators",
601                Material::PhaseAlloys => "Phase Alloys",
602                Material::PhasingMembraneResidue => "Phasing Membrane Residue",
603                Material::PolymerCapacitors => "Polymer Capacitors",
604                Material::PrecipitatedAlloys => "Precipitated Alloys",
605                Material::ProprietaryComposites => "Proprietary Composites",
606                Material::PropulsionElements => "Propulsion Elements",
607                Material::ProtoHeatRadiators => "Proto Heat Radiators",
608                Material::ProtoLightAlloys => "Proto Light Alloys",
609                Material::ProtoRadiolicAlloys => "Proto Radiolic Alloys",
610                Material::RefinedFocusCrystals => "Refined Focus Crystals",
611                Material::SalvagedAlloys => "Salvaged Alloys",
612                Material::SensorFragment => "Sensor Fragment",
613                Material::ShieldEmitters => "Shield Emitters",
614                Material::ShieldingSensors => "Shielding Sensors",
615                Material::TacticalCoreChip => "Tactical Core Chip",
616                Material::TemperedAlloys => "Tempered Alloys",
617                Material::ThargoidCarapace => "Thargoid Carapace",
618                Material::ThargoidEnergyCell => "Thargoid Energy Cell",
619                Material::ThargoidOrganicCircuitry => "Thargoid Organic Circuitry",
620                Material::ThargoidTechnologicalComponents => "Thargoid Technological Components",
621                Material::ThermicAlloys => "Thermic Alloys",
622                Material::WeaponParts => "Weapon Parts",
623                Material::WornShieldEmitters => "Worn Shield Emitters",
624                Material::WreckageComponents => "Wreckage Components",
625
626                // Encoded
627                Material::AberrantShieldPatternAnalysis => "Aberrant Shield Pattern Analysis",
628                Material::AbnormalCompactEmissionData => "Abnormal Compact Emissions Data",
629                Material::AdaptiveEncryptorsCapture => "Adaptive Encryptors Capture",
630                Material::AnomalousBulkScanData => "Anomalous Bulk Scan Data",
631                Material::AnomalousFSDTelemetry => "Anomalous FSD Telemetry",
632                Material::AtypicalDisruptedWakeEchoes => "Atypical Disrupted Wake Echoes",
633                Material::AtypicalEncryptionArchives => "Atypical Encryption Archives",
634                Material::ClassifiedScanDatabanks => "Classified Scan Databanks",
635                Material::ClassifiedScanFragment => "Classified Scan Fragment",
636                Material::CrackedIndustrialFirmware => "Cracked Industrial Firmware",
637                Material::DataminedWakeExceptions => "Datamined Wake Exceptions",
638                Material::DecodedEmissionData => "Decoded Emission Data",
639                Material::DistortedShieldCycleRecordings => "Distorted Shield Cycle Recordings",
640                Material::DivergentScanData => "Divergent Scan Data",
641                Material::EccentricHyperspaceTrajectories => "Eccentric Hyperspace Trajectories",
642                Material::ExceptionScrambledEmissionData => "Exceptional Scrambled Emission Data",
643                Material::GuardianModuleBlueprintFragment => "Guardian Module Blueprint Fragment",
644                Material::GuardianVesselBlueprintFragment => "Guardian Vessel Blueprint Fragment",
645                Material::GuardianWeaponBlueprintFragment => "Guardian Weapon Blueprint Fragment",
646                Material::InconsistentShieldSoakAnalysis => "Inconsistent Shield Soak Analysis",
647                Material::IrregularEmissionData => "Irregular Emission Data",
648                Material::MassiveEnergySurgeAnalytics => "Massive Energy Surge Analytics",
649                Material::ModifiedConsumerFirmware => "Modified Consumer Firmware",
650                Material::ModifiedEmbeddedFirmware => "Modified Embedded Firmware",
651                Material::OpenSymmetricKeys => "Open Symmetric Keys",
652                Material::PatternAlphaObeliskData => "Pattern Alpha Obelisk Data",
653                Material::PatternBetaObeliskData => "Pattern Beta Obelisk Data",
654                Material::PatternDeltaObeliskData => "Pattern Delta Obelisk Data",
655                Material::PatternEpsilonObeliskData => "Pattern Epsilon Obelisk Data",
656                Material::PatternGammaObeliskData => "Pattern Gamma Obelisk Data",
657                Material::PeculiarShieldFrequencyData => "Peculiar Shield Frequency Data",
658                Material::SecurityFirmwarePatch => "Security Firmware Patch",
659                Material::ShipFlightData => "Ship Flight Data",
660                Material::ShipSystemsData => "Ship Systems Data",
661                Material::SpecializedLegacyFirmware => "Specialised Legacy Firmware",
662                Material::StrangeWakeSolutions => "Strange Wake Solutions",
663                Material::TaggedEncryptionCodes => "Tagged Encryption Codes",
664                Material::ThargoidInterdictionTelemetry => "Thargoid Interdiction Telemetry",
665                Material::ThargoidMaterialCompositionData => "Thargoid Material Composition Data",
666                Material::ThargoidResidueData => "Thargoid Residue Data",
667                Material::ThargoidShipSignature => "Thargoid Ship Signature",
668                Material::ThargoidStructuralData => "Thargoid Structural Data",
669                Material::ThargoidWakeData => "Thargoid Wake Data",
670                Material::UnexpectedEmissionData => "Unexpected Emission Data",
671                Material::UnidentifiedScanArchives => "Unidentified Scan Archives",
672                Material::UntypicalShieldScans => "Untypical Shield Scans",
673                Material::UnusualEncryptedFiles => "Unusual Encrypted Files",
674
675                #[cfg(feature = "allow-unknown")]
676                Material::Unknown(unknown) => return write!(f, "Unknown material: {unknown}"),
677            }
678        )
679    }
680}