73 lines
2.3 KiB
Gleam
73 lines
2.3 KiB
Gleam
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))
|
|
}
|