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)) }