Skip to main content

ed_journals/modules/materials/models/
material_category.rs

1use std::fmt::{Display, Formatter};
2
3use serde::{Deserialize, Serialize};
4
5use crate::modules::materials::Material;
6
7/// The type of material, either Raw, Manufactured, or Encoded.
8#[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}