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