gleam-spacetraders-sdk/src/spacetraders_models/ship_condition_event_symbol.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))
}