gleam-spacetraders-sdk/src/spacetraders_models/ship_nav_status.gleam

37 lines
834 B
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/json.{type Json}
pub type ShipNavStatus {
InTransit
InOrbit
Docked
}
pub fn parse(value: String) -> Result(ShipNavStatus, Nil) {
case value {
"IN_TRANSIT" -> Ok(InTransit)
"IN_ORBIT" -> Ok(InOrbit)
"DOCKED" -> Ok(Docked)
_ -> Error(Nil)
}
}
pub fn decoder() -> Decoder(ShipNavStatus) {
use value <- decode.then(decode.string)
case parse(value) {
Ok(ship_nav_status) -> decode.success(ship_nav_status)
Error(Nil) -> decode.failure(InTransit, "ShipNavStatus")
}
}
pub fn to_string(ship_nav_status: ShipNavStatus) -> String {
case ship_nav_status {
InTransit -> "IN_TRANSIT"
InOrbit -> "IN_ORBIT"
Docked -> "DOCKED"
}
}
pub fn encode(ship_nav_status: ShipNavStatus) -> Json {
json.string(to_string(ship_nav_status))
}