ed_journals/modules/materials/models/
material_category.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
use std::fmt::{Display, Formatter};

use serde::{Deserialize, Serialize};

use crate::modules::materials::Material;

/// The type of material, either Raw, Manufactured, or Encoded.
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub enum MaterialCategory {
    #[serde(alias = "raw", alias = "$MICRORESOURCE_CATEGORY_Raw;")]
    Raw,

    #[serde(
        alias = "manufactured",
        alias = "$MICRORESOURCE_CATEGORY_Manufactured;"
    )]
    Manufactured,

    #[serde(alias = "encoded", alias = "$MICRORESOURCE_CATEGORY_Encoded;")]
    Encoded,

    #[cfg(feature = "allow-unknown")]
    #[cfg_attr(docsrs, doc(cfg(feature = "allow-unknown")))]
    #[serde(untagged)]
    Unknown(String),
}

impl From<&Material> for MaterialCategory {
    fn from(value: &Material) -> Self {
        match value {
            Material::Carbon
            | Material::Vanadium
            | Material::Niobium
            | Material::Yttrium
            | Material::Phosphorus
            | Material::Chromium
            | Material::Molybdenum
            | Material::Technetium
            | Material::Sulphur
            | Material::Manganese
            | Material::Cadmium
            | Material::Ruthenium
            | Material::Iron
            | Material::Zinc
            | Material::Tin
            | Material::Selenium
            | Material::Nickel
            | Material::Germanium
            | Material::Tungsten
            | Material::Tellurium
            | Material::Rhenium
            | Material::Arsenic
            | Material::Mercury
            | Material::Polonium
            | Material::Lead
            | Material::Zirconium
            | Material::Boron
            | Material::Antimony => MaterialCategory::Raw,

            Material::ChemicalStorageUnits
            | Material::ChemicalProcessors
            | Material::ChemicalDistillery
            | Material::ChemicalManipulators
            | Material::PharmaceuticalIsolators
            | Material::TemperedAlloys
            | Material::HeatResistantCeramics
            | Material::PrecipitatedAlloys
            | Material::ThermicAlloys
            | Material::MilitaryGradeAlloys
            | Material::HeatConductionWiring
            | Material::HeatDispersionPlate
            | Material::HeatExchangers
            | Material::HeatVanes
            | Material::ProtoHeatRadiators
            | Material::BasicConductors
            | Material::ConductiveComponents
            | Material::ConductiveCeramics
            | Material::ConductivePolymers
            | Material::BiotechConductors
            | Material::MechanicalScrap
            | Material::MechanicalEquipment
            | Material::MechanicalComponents
            | Material::ConfigurableComponents
            | Material::ImprovisedComponents
            | Material::GridResistors
            | Material::HybridCapacitors
            | Material::ElectrochemicalArrays
            | Material::PolymerCapacitors
            | Material::MilitarySupercapacitors
            | Material::WornShieldEmitters
            | Material::ShieldEmitters
            | Material::ShieldingSensors
            | Material::CompoundShielding
            | Material::ImperialShielding
            | Material::CompactComposites
            | Material::FilamentComposites
            | Material::HighDensityComposites
            | Material::ProprietaryComposites
            | Material::CoreDynamicsComposites
            | Material::CrystalShards
            | Material::FlawedFocusCrystals
            | Material::FocusCrystals
            | Material::RefinedFocusCrystals
            | Material::ExquisiteFocusCrystals
            | Material::SalvagedAlloys
            | Material::GalvanisingAlloys
            | Material::PhaseAlloys
            | Material::ProtoLightAlloys
            | Material::ProtoRadiolicAlloys
            | Material::HardenedSurfaceFragments
            | Material::CausticShard
            | Material::TacticalCoreChip
            | Material::ThargoidCarapace
            | Material::BioMechanicalConduits
            | Material::CorrosiveMechanisms
            | Material::PhasingMembraneResidue
            | Material::ThargoidEnergyCell
            | Material::WreckageComponents
            | Material::CausticCrystal
            | Material::ThargoidTechnologicalComponents
            | Material::WeaponParts
            | Material::HeatExposureSpecimen
            | Material::PropulsionElements
            | Material::SensorFragment
            | Material::ThargoidOrganicCircuitry
            | Material::GuardianPowerCell
            | Material::GuardianWreckageComponents
            | Material::GuardianPowerConduit
            | Material::GuardianSentinelWeaponParts
            | Material::GuardianTechnologyComponent => MaterialCategory::Manufactured,

            Material::ExceptionScrambledEmissionData
            | Material::IrregularEmissionData
            | Material::UnexpectedEmissionData
            | Material::DecodedEmissionData
            | Material::AbnormalCompactEmissionData
            | Material::AtypicalDisruptedWakeEchoes
            | Material::AnomalousFSDTelemetry
            | Material::StrangeWakeSolutions
            | Material::EccentricHyperspaceTrajectories
            | Material::DataminedWakeExceptions
            | Material::DistortedShieldCycleRecordings
            | Material::InconsistentShieldSoakAnalysis
            | Material::UntypicalShieldScans
            | Material::AberrantShieldPatternAnalysis
            | Material::PeculiarShieldFrequencyData
            | Material::UnusualEncryptedFiles
            | Material::TaggedEncryptionCodes
            | Material::OpenSymmetricKeys
            | Material::AtypicalEncryptionArchives
            | Material::AdaptiveEncryptorsCapture
            | Material::AnomalousBulkScanData
            | Material::UnidentifiedScanArchives
            | Material::ClassifiedScanDatabanks
            | Material::DivergentScanData
            | Material::ClassifiedScanFragment
            | Material::SpecializedLegacyFirmware
            | Material::ModifiedConsumerFirmware
            | Material::CrackedIndustrialFirmware
            | Material::SecurityFirmwarePatch
            | Material::ModifiedEmbeddedFirmware
            | Material::ThargoidStructuralData
            | Material::MassiveEnergySurgeAnalytics
            | Material::ShipFlightData
            | Material::ShipSystemsData
            | Material::ThargoidInterdictionTelemetry
            | Material::ThargoidMaterialCompositionData
            | Material::ThargoidShipSignature
            | Material::ThargoidResidueData
            | Material::ThargoidWakeData
            | Material::PatternGammaObeliskData
            | Material::PatternBetaObeliskData
            | Material::PatternAlphaObeliskData
            | Material::PatternDeltaObeliskData
            | Material::PatternEpsilonObeliskData
            | Material::GuardianModuleBlueprintFragment
            | Material::GuardianVesselBlueprintFragment
            | Material::GuardianWeaponBlueprintFragment => MaterialCategory::Encoded,

            #[cfg(feature = "allow-unknown")]
            Material::Unknown(value) => {
                MaterialCategory::Unknown(format!("Unknown material: '{}'", value))
            }
        }
    }
}

impl From<Material> for MaterialCategory {
    fn from(value: Material) -> Self {
        (&value).into()
    }
}

impl Display for MaterialCategory {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "{}",
            match self {
                MaterialCategory::Raw => "Raw",
                MaterialCategory::Manufactured => "Manufactured",
                MaterialCategory::Encoded => "Encoded",

                #[cfg(feature = "allow-unknown")]
                MaterialCategory::Unknown(unknown) => return write!(f, "{}", unknown),
            }
        )
    }
}