76 lines
2.1 KiB
Gleam
76 lines
2.1 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/json.{type Json}
|
|
|
|
pub type FrameSymbol {
|
|
FrameProbe
|
|
FrameDrone
|
|
FrameInterceptor
|
|
FrameRacer
|
|
FrameFighter
|
|
FrameFrigate
|
|
FrameShuttle
|
|
FrameExplorer
|
|
FrameMiner
|
|
FrameLightFreighter
|
|
FrameHeavyFreighter
|
|
FrameTransport
|
|
FrameDestroyer
|
|
FrameCruiser
|
|
FrameCarrier
|
|
FrameBulkFreighter
|
|
}
|
|
|
|
pub fn parse(value: String) -> Result(FrameSymbol, Nil) {
|
|
case value {
|
|
"FRAME_PROBE" -> Ok(FrameProbe)
|
|
"FRAME_DRONE" -> Ok(FrameDrone)
|
|
"FRAME_INTERCEPTOR" -> Ok(FrameInterceptor)
|
|
"FRAME_RACER" -> Ok(FrameRacer)
|
|
"FRAME_FIGHTER" -> Ok(FrameFighter)
|
|
"FRAME_FRIGATE" -> Ok(FrameFrigate)
|
|
"FRAME_SHUTTLE" -> Ok(FrameShuttle)
|
|
"FRAME_EXPLORER" -> Ok(FrameExplorer)
|
|
"FRAME_MINER" -> Ok(FrameMiner)
|
|
"FRAME_LIGHT_FREIGHTER" -> Ok(FrameLightFreighter)
|
|
"FRAME_HEAVY_FREIGHTER" -> Ok(FrameHeavyFreighter)
|
|
"FRAME_TRANSPORT" -> Ok(FrameTransport)
|
|
"FRAME_DESTROYER" -> Ok(FrameDestroyer)
|
|
"FRAME_CRUISER" -> Ok(FrameCruiser)
|
|
"FRAME_CARRIER" -> Ok(FrameCarrier)
|
|
"FRAME_BULK_FREIGHTER" -> Ok(FrameBulkFreighter)
|
|
_ -> Error(Nil)
|
|
}
|
|
}
|
|
|
|
pub fn decoder() -> Decoder(FrameSymbol) {
|
|
use value <- decode.then(decode.string)
|
|
case parse(value) {
|
|
Ok(frame_symbol) -> decode.success(frame_symbol)
|
|
Error(Nil) -> decode.failure(FrameProbe, "FrameSymbol")
|
|
}
|
|
}
|
|
|
|
pub fn to_string(frame_symbol: FrameSymbol) -> String {
|
|
case frame_symbol {
|
|
FrameProbe -> "FRAME_PROBE"
|
|
FrameDrone -> "FRAME_DRONE"
|
|
FrameInterceptor -> "FRAME_INTERCEPTOR"
|
|
FrameRacer -> "FRAME_RACER"
|
|
FrameFighter -> "FRAME_FIGHTER"
|
|
FrameFrigate -> "FRAME_FRIGATE"
|
|
FrameShuttle -> "FRAME_SHUTTLE"
|
|
FrameExplorer -> "FRAME_EXPLORER"
|
|
FrameMiner -> "FRAME_MINER"
|
|
FrameLightFreighter -> "FRAME_LIGHT_FREIGHTER"
|
|
FrameHeavyFreighter -> "FRAME_HEAVY_FREIGHTER"
|
|
FrameTransport -> "FRAME_TRANSPORT"
|
|
FrameDestroyer -> "FRAME_DESTROYER"
|
|
FrameCruiser -> "FRAME_CRUISER"
|
|
FrameCarrier -> "FRAME_CARRIER"
|
|
FrameBulkFreighter -> "FRAME_BULK_FREIGHTER"
|
|
}
|
|
}
|
|
|
|
pub fn encode(frame_symbol: FrameSymbol) -> Json {
|
|
json.string(to_string(frame_symbol))
|
|
}
|