gleam-spacetraders-sdk/src/models/frame_symbol.gleam
Lily Rose 64f3729d0c
Some checks are pending
test / test (push) Waiting to run
Refactoring and general tidying up
2025-06-17 19:04:29 +10:00

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