112 lines
4.6 KiB
Gleam
112 lines
4.6 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/json.{type Json}
|
|
|
|
pub type ShipConditionEventSymbol {
|
|
ReactorOverload
|
|
EnergySpikeFromMineral
|
|
SolarFlareInterference
|
|
CoolantLeak
|
|
PowerDistributionFluctuation
|
|
MagneticFieldDisruption
|
|
HullMicrometeoriteStrikes
|
|
StructuralStressFractures
|
|
CorrosiveMineralContamination
|
|
ThermalExpansionMismatch
|
|
VibrationDamageFromDrilling
|
|
ElectromagneticFieldInterference
|
|
ImpactWithExtractedDebris
|
|
FuelEfficiencyDegradation
|
|
CoolantSystemAgeing
|
|
DustMicroabrasions
|
|
ThrusterNozzleWear
|
|
ExhaustPortClogging
|
|
BearingLubricationFade
|
|
SensorCalibrationDrift
|
|
HullMicrometeoriteDamage
|
|
SpaceDebrisCollision
|
|
ThermalStress
|
|
VibrationOverload
|
|
PressureDifferentialStress
|
|
ElectromagneticSurgeEffects
|
|
AtmosphericEntryHeat
|
|
}
|
|
|
|
pub fn parse(value: String) -> Result(ShipConditionEventSymbol, Nil) {
|
|
case value {
|
|
"REACTOR_OVERLOAD" -> Ok(ReactorOverload)
|
|
"ENERGY_SPIKE_FROM_MINERAL" -> Ok(EnergySpikeFromMineral)
|
|
"SOLAR_FLARE_INTERFERENCE" -> Ok(SolarFlareInterference)
|
|
"COOLANT_LEAK" -> Ok(CoolantLeak)
|
|
"POWER_DISTRIBUTION_FLUCTUATION" -> Ok(PowerDistributionFluctuation)
|
|
"MAGNETIC_FIELD_DISRUPTION" -> Ok(MagneticFieldDisruption)
|
|
"HULL_MICROMETEORITE_STRIKES" -> Ok(HullMicrometeoriteStrikes)
|
|
"STRUCTURAL_STRESS_FRACTURES" -> Ok(StructuralStressFractures)
|
|
"CORROSIVE_MINERAL_CONTAMINATION" -> Ok(CorrosiveMineralContamination)
|
|
"THERMAL_EXPANSION_MISMATCH" -> Ok(ThermalExpansionMismatch)
|
|
"VIBRATION_DAMAGE_FROM_DRILLING" -> Ok(VibrationDamageFromDrilling)
|
|
"ELECTROMAGNETIC_FIELD_INTERFERENCE" -> Ok(ElectromagneticFieldInterference)
|
|
"IMPACT_WITH_EXTRACTED_DEBRIS" -> Ok(ImpactWithExtractedDebris)
|
|
"FUEL_EFFICIENCY_DEGRADATION" -> Ok(FuelEfficiencyDegradation)
|
|
"COOLANT_SYSTEM_AGEING" -> Ok(CoolantSystemAgeing)
|
|
"DUST_MICROABRASIONS" -> Ok(DustMicroabrasions)
|
|
"THRUSTER_NOZZLE_WEAR" -> Ok(ThrusterNozzleWear)
|
|
"EXHAUST_PORT_CLOGGING" -> Ok(ExhaustPortClogging)
|
|
"BEARING_LUBRICATION_FADE" -> Ok(BearingLubricationFade)
|
|
"SENSOR_CALIBRATION_DRIFT" -> Ok(SensorCalibrationDrift)
|
|
"HULL_MICROMETEORITE_DAMAGE" -> Ok(HullMicrometeoriteDamage)
|
|
"SPACE_DEBRIS_COLLISION" -> Ok(SpaceDebrisCollision)
|
|
"THERMAL_STRESS" -> Ok(ThermalStress)
|
|
"VIBRATION_OVERLOAD" -> Ok(VibrationOverload)
|
|
"PRESSURE_DIFFERENTIAL_STRESS" -> Ok(PressureDifferentialStress)
|
|
"ELECTROMAGNETIC_SURGE_EFFECTS" -> Ok(ElectromagneticSurgeEffects)
|
|
"ATMOSPHERIC_ENTRY_HEAT" -> Ok(AtmosphericEntryHeat)
|
|
_ -> Error(Nil)
|
|
}
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(ShipConditionEventSymbol) {
|
|
use value <- decode.then(decode.string)
|
|
case parse(value) {
|
|
Ok(ship_condition_event_symbol) ->
|
|
decode.success(ship_condition_event_symbol)
|
|
Error(Nil) -> decode.failure(ReactorOverload, "ShipConditionEventSymbol")
|
|
}
|
|
}
|
|
|
|
pub fn to_string(
|
|
ship_condition_event_symbol: ShipConditionEventSymbol,
|
|
) -> String {
|
|
case ship_condition_event_symbol {
|
|
ReactorOverload -> "REACTOR_OVERLOAD"
|
|
EnergySpikeFromMineral -> "ENERGY_SPIKE_FROM_MINERAL"
|
|
SolarFlareInterference -> "SOLAR_FLARE_INTERFERENCE"
|
|
CoolantLeak -> "COOLANT_LEAK"
|
|
PowerDistributionFluctuation -> "POWER_DISTRIBUTION_FLUCTUATION"
|
|
MagneticFieldDisruption -> "MAGNETIC_FIELD_DISRUPTION"
|
|
HullMicrometeoriteStrikes -> "HULL_MICROMETEORITE_STRIKES"
|
|
StructuralStressFractures -> "STRUCTURAL_STRESS_FRACTURES"
|
|
CorrosiveMineralContamination -> "CORROSIVE_MINERAL_CONTAMINATION"
|
|
ThermalExpansionMismatch -> "THERMAL_EXPANSION_MISMATCH"
|
|
VibrationDamageFromDrilling -> "VIBRATION_DAMAGE_FROM_DRILLING"
|
|
ElectromagneticFieldInterference -> "ELECTROMAGNETIC_FIELD_INTERFERENCE"
|
|
ImpactWithExtractedDebris -> "IMPACT_WITH_EXTRACTED_DEBRIS"
|
|
FuelEfficiencyDegradation -> "FUEL_EFFICIENCY_DEGRADATION"
|
|
CoolantSystemAgeing -> "COOLANT_SYSTEM_AGEING"
|
|
DustMicroabrasions -> "DUST_MICROABRASIONS"
|
|
ThrusterNozzleWear -> "THRUSTER_NOZZLE_WEAR"
|
|
ExhaustPortClogging -> "EXHAUST_PORT_CLOGGING"
|
|
BearingLubricationFade -> "BEARING_LUBRICATION_FADE"
|
|
SensorCalibrationDrift -> "SENSOR_CALIBRATION_DRIFT"
|
|
HullMicrometeoriteDamage -> "HULL_MICROMETEORITE_DAMAGE"
|
|
SpaceDebrisCollision -> "SPACE_DEBRIS_COLLISION"
|
|
ThermalStress -> "THERMAL_STRESS"
|
|
VibrationOverload -> "VIBRATION_OVERLOAD"
|
|
PressureDifferentialStress -> "PRESSURE_DIFFERENTIAL_STRESS"
|
|
ElectromagneticSurgeEffects -> "ELECTROMAGNETIC_SURGE_EFFECTS"
|
|
AtmosphericEntryHeat -> "ATMOSPHERIC_ENTRY_HEAT"
|
|
}
|
|
}
|
|
|
|
pub fn encode(ship_condition_event_symbol: ShipConditionEventSymbol) -> Json {
|
|
json.string(to_string(ship_condition_event_symbol))
|
|
}
|