import gleam/dynamic/decode.{type Decoder} import gleam/json.{type Json} pub type MountSymbol { MountGasSiphonI MountGasSiphonII MountGasSiphonIII MountSurveyorI MountSurveyorII MountSurveyorIII MountSensorArrayI MountSensorArrayII MountSensorArrayIII MountMiningLaserI MountMiningLaserII MountMiningLaserIII MountLaserCannonI MountMissileLauncherI MountTurretI } pub fn parse(value: String) -> Result(MountSymbol, Nil) { case value { "MOUNT_GAS_SIPHON_I" -> Ok(MountGasSiphonI) "MOUNT_GAS_SIPHON_II" -> Ok(MountGasSiphonII) "MOUNT_GAS_SIPHON_III" -> Ok(MountGasSiphonIII) "MOUNT_SURVEYOR_I" -> Ok(MountSurveyorI) "MOUNT_SURVEYOR_II" -> Ok(MountSurveyorII) "MOUNT_SURVEYOR_III" -> Ok(MountSurveyorIII) "MOUNT_SENSOR_ARRAY_I" -> Ok(MountSensorArrayI) "MOUNT_SENSOR_ARRAY_II" -> Ok(MountSensorArrayII) "MOUNT_SENSOR_ARRAY_III" -> Ok(MountSensorArrayIII) "MOUNT_MINING_LASER_I" -> Ok(MountMiningLaserI) "MOUNT_MINING_LASER_II" -> Ok(MountMiningLaserII) "MOUNT_MINING_LASER_III" -> Ok(MountMiningLaserIII) "MOUNT_LASER_CANNON_I" -> Ok(MountLaserCannonI) "MOUNT_MISSILE_LAUNCHER_I" -> Ok(MountMissileLauncherI) "MOUNT_TURRET_I" -> Ok(MountTurretI) _ -> Error(Nil) } } pub fn decoder() -> Decoder(MountSymbol) { use value <- decode.then(decode.string) case parse(value) { Ok(mount_symbol) -> decode.success(mount_symbol) Error(Nil) -> decode.failure(MountGasSiphonI, "MountSymbol") } } pub fn to_string(mount_symbol: MountSymbol) -> String { case mount_symbol { MountGasSiphonI -> "MOUNT_GAS_SIPHON_I" MountGasSiphonII -> "MOUNT_GAS_SIPHON_II" MountGasSiphonIII -> "MOUNT_GAS_SIPHON_III" MountSurveyorI -> "MOUNT_SURVEYOR_I" MountSurveyorII -> "MOUNT_SURVEYOR_II" MountSurveyorIII -> "MOUNT_SURVEYOR_III" MountSensorArrayI -> "MOUNT_SENSOR_ARRAY_I" MountSensorArrayII -> "MOUNT_SENSOR_ARRAY_II" MountSensorArrayIII -> "MOUNT_SENSOR_ARRAY_III" MountMiningLaserI -> "MOUNT_MINING_LASER_I" MountMiningLaserII -> "MOUNT_MINING_LASER_II" MountMiningLaserIII -> "MOUNT_MINING_LASER_III" MountLaserCannonI -> "MOUNT_LASER_CANNON_I" MountMissileLauncherI -> "MOUNT_MISSILE_LAUNCHER_I" MountTurretI -> "MOUNT_TURRET_I" } } pub fn encode(mount_symbol: MountSymbol) -> Json { json.string(to_string(mount_symbol)) }